Loading AI tools
用于安全数据通信的密码网络协议,远程外壳服务或命令执行以及两台联网计算机之间的其他安全网络服务 来自维基百科,自由的百科全书
安全外壳协议(Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接[2]。SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。SSH使用频率最高的场合是类Unix系统,但是Windows操作系统也能有限度地使用SSH。2015年,微软宣布将在未来的操作系统中提供原生SSH协议支持[3],Windows 10 1803版本已提供OpenSSH工具[4]。
在设计上,SSH是Telnet和非安全shell的替代品。Telnet和Berkeley rlogin、rsh、rexec等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击[5]。SSH旨在保证非安全网络环境(例如互联网)中信息加密完整可靠。
不过,SSH也被指出有被嗅探甚至解密的漏洞。早在2011年,中國的網際網路審查機構已經有能力針對SSH連線的刺探及干擾。[6][7]而後爱德华·斯诺登泄露的文件也指出,美国国家安全局有时能够把SSH协议传输的信息解密出来,从而读出SSH会话的传输内容[8]。2017年7月6日,非营利组织維基解密确认美国中央情报局已经开发出能够在Windows或Linux操作系统中窃取SSH会话的工具。[9]
SSH以非对称加密实现身份验证[2]。身份验证有多种途径,例如其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程中私钥本身不会传输到网络中。
SSH协议有两个主要版本,分别是SSH-1和SSH-2。无论是哪个版本,核实未知密钥来源都是重要的事情,因为SSH只验证提供用户是否拥有与公钥相匹配的私钥,只要接受公钥而且密钥匹配服务器就会授予许可。这样的话,一旦接受了恶意攻击者的公钥,那么系统也会把攻击者视为合法用户。
在类Unix系统中,已许可登录的公钥通常保存在用户 /home 目录的 ~/.ssh/authorized_keys 文件中[10],该文件只由SSH使用。当远程机器持有公钥,而本地持有对应私钥时,登录过程不再需要手动输入密码。另外为了额外的安全性,私钥本身也能用密码保护。
私钥会保存在固定位置,也可以通过命令行参数指定(例如ssh命令的“-i”选项)。ssh-keygen是生成密钥的工具之一。
SSH也支持基于密码的身份验证,此时密钥是自动生成的。若客户端和服务端从未进行过身份验证,SSH未记录服务器端所使用的密钥,那么攻击者可以模仿服务器端请求并获取密码,即中间人攻击。但是密码认证可以禁用,而且SSH客户端在发现新密钥或未知服务器时会向用户发出警告。
SSH的经典用途是登入到远程电脑中执行命令。除此之外,SSH也支持隧道协议、端口映射和X11连接。借助SFTP或SCP协议,SSH还可以传输文件[2]。
SSH使用客户端-服务器模型,标准端口为22[11]。服务器端需要开启SSH守护进程以便接受远端的连接,而用户需要使用SSH客户端与其建立连接。
大多数现代操作系统(包括macOS、大部分Linux、OpenBSD、FreeBSD、Solaris等系统)都提供了SSH,包括Windows系统也提供SSH程序(在Windows 10 1809版本之后)。在软件层次,许多关于SSH的专有软件、免費軟體和开源软件被研发出来,如:
从云计算的角度上讲,SSH能够阻止一些因直接暴露在互联网而产生的安全问题,在解决连接问题上发挥了重要作用。SSH隧道可以在互联网、防火墙和虚拟机之间提供一个安全的通道[12]。
芬兰赫尔辛基理工大学的塔图·于勒宁发现自己学校存在嗅探密码的网络攻击,便于1995年编写了一套保护信息传输的程序,并称其为“secure shell”,简称SSH[13],设计目标是取代先前的rlogin、Telnet、FTP[14]和rsh等安全性不足的协议。1995年7月,于勒宁以免費軟體的形式将其发布。程序很快流行起来,截至1995年底,SSH的用户数已经达到两万,遍布五十个国家。
1995年12月,于勒宁创立了SSH通信安全公司来继续开发和销售SSH。SSH的早期版本用到了很多自由软件,例如GNU libgmp,但后来由SSH公司发布的版本逐渐变成了专有软件。
截至2000年,已经有两百万用户使用SSH。[15]
1999年,开发者们希望使用自由版本的SSH,于是重新使用较旧的1.2.12版本,这也是最后一个采用开放源代码许可的版本。随后瑞典程序员Björn Grönvall基于这个版本开发了OSSH。不久之后,OpenBSD的开发者又在Grönvall版本的基础上进行了大量修改,形成了OpenSSH,并于OpenBSD 2.6一起发行。从该版本开始,OpenSSH又逐渐移植到了其他操作系统上面。[16]
截至2005年,OpenSSH是唯一一种最流行的SSH实现,而且成为了大量操作系统的默认组件,而OSSH已经过时[17]。OpenSSH仍在维护,而且已经支持SSH-2协议。从7.6版开始,OpenSSH不再支持SSH-1协议。
2006年,SSH-2协议成为了新的标准。与SSH-1相比,SSH-2进行了一系列功能改进并增强了安全性,例如基于迪菲-赫爾曼密鑰交換的加密和基于訊息鑑別碼的完整性检查。SSH-2还支持通过单个SSH连接任意数量的shell会话。SSH-2协议与SSH-1不兼容,由于更加流行,一些实现(例如lsh和Dropbear)只支持SSH-2协议。
RFC 4253规定支持2.0及以前版本SSH的SSH服务器应将其原始版本标为“1.99”[18]。“1.99”并不是实际的软件版本号,而是为了表示向下兼容。
SSH协议框架中最主要的部分是三个协议:
同时还有为许多高层的网络安全应用协议提供扩展的支持。
各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
在客户端来看,SSH提供两种级别的安全验证。
在服务器端来看,SSH也提供安全验证。
SSH协议框架中设计了大量可扩展项,比如用户自定义算法、客户自定义密钥规则、高层扩展功能性应用协议。这些扩展大多遵循IANA的有关规定,特别是在重要的部分,像命名规则和消息编码方面。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.