Secure Shell(SSH)是一种加密网络协议,用于在不安全的网络上安全地运行网络服务。
SSH通过客户端 - 服务器体系结构中的不安全网络提供安全通道,将SSH客户端应用程序与SSH服务器相连接。
常见的应用程序包括远程命令行登录和远程命令执行,但任何网络服务都可以通过SSH进行安全保护。
协议规范区分了两个主要版本,分别称为SSH-1和SSH-2。最着名的示例应用程序是用户远程登录计算机系统。
该协议最明显的应用是在类似Unix的操作系统上访问shell帐户,但它在Windows上也有一些有限的用途。在2015年,微软宣布他们将在未来的版本中包含对SSH的本地支持。
SSH被设计为替代Telnet和不安全的远程shell协议,如Berkeleyrlogin,rsh和rexec协议。这些协议以明文形式发送信息,特别是密码,使它们易于使用数据包分析进行截取和披露。SSH使用的加密旨在通过不安全的网络(如Internet)提供数据的机密性和完整性,尽管Edward Snowden泄漏的文件表明国家安全局有时可以解密SSH,允许他们读取SSH会话的内容。
2017年7月6日,政府透明度组织维基解密确认,美国中央情报局开发的工具可以安装在运行MicrosoftWindows或GNU / Linux操作系统的计算机上,以拦截受害系统上SSH客户端启动的SSH连接。
定义
如果需要,SSH使用公钥加密来验证远程计算机并允许它对用户进行身份验证。[有几种使用SSH的方式;一种是使用自动生成的公私密钥对来简单地加密网络连接,然后使用密码认证登录。
另一种方法是使用手动生成的公私密钥对来执行认证,允许用户或程序登录而不必指定密码。在这种情况下,任何人都可以生成一对不同的密钥(公共和私人)。公钥被放置在所有必须允许访问匹配私钥所有者的计算机上(所有者保密私钥)。虽然身份验证基于私钥,但身份验证过程中永远不会通过网络传输密钥本身。SSH只验证提供公钥的同一个人是否拥有匹配的私钥。在SSH的所有版本中它来验证未知是重要的公共密钥,即关联与身份的公共密钥,然后再接受它们为有效的。在未经验证的情况下接受攻击者的公钥将授权未经授权的攻击者作为有效用户。
密钥管理
在类Unix系统上,授权公钥列表通常存储在允许远程登录的用户的主目录中,文件为〜/ .ssh / authorized_keys。这个文件只有在除了所有者和根以外的任何东西都不能被写入的情况下,才受到SSH的尊重。当远程端存在公钥并且本地端存在匹配的私钥时,不再需要输入密码(某些软件(如消息传递接口(MPI)堆栈)可能需要此无密码访问权限才能运行正确)。但是,为了增加安全性,可以使用密码锁定私钥本身。
私钥也可以在标准位置查找,其完整路径可以指定为命令行设置(ssh选项-i)。在SSH-凯基工具产生公钥和私钥,总是成对出现。
SSH还支持通过自动生成的密钥加密的基于密码的身份验证。在这种情况下,攻击者可以模仿合法的服务器端,请求密码并获取它(中间人攻击)。但是,这只有在双方之前从未认证过的情况下才有可能,因为SSH记住了服务器端以前使用的密钥。SSH客户端在接受新的,以前未知的服务器的密钥之前发出警告。密码认证可以被禁用。
用法
SSH通常用于登录远程机器并执行命令,但它也支持隧道,转发TCP端口和X11连接;它可以使用关联的SSH文件传输(SFTP)或安全副本(SCP)协议传输文件。[2]SSH使用客户端 - 服务器模型。
在标准TCP端口22已被分配用于接触SSH服务器。
SSH客户端程序通常用于建立到接受远程连接的SSH守护程序的连接。两者通常都存在于大多数现代操作系统中,包括macOS,大多数Linux,OpenBSD,FreeBSD,NetBSD,Solaris和OpenVMS。值得注意的是,Windows是少数几个默认不包含SSH的现代桌面/服务器操作系统之一。专有,免费软件和开源(例如PuTTY,和作为Cygwin的一部分的OpenSSH版本)存在各种复杂性和完整性的版本。本地Linux文件管理器(例如Konqueror)可以使用FISH协议通过拖放功能提供分割窗格GUI。开源Windows程序WinSCP使用PuTTY作为后端提供了类似的文件管理(同步,复制,远程删除)功能。WinSCP和PuTTY都可以直接从USB驱动器运行,而无需在客户机上安装。在Windows中设置SSH服务器通常需要安装(例如,通过安装Cygwin[)。在Windows 10版本1709中,可以使用官方的OpenSSH Win32端口。
SSH在云计算中非常重要,可以解决连接问题,避免直接在Internet上暴露基于云的虚拟机的安全问题。SSH隧道可以通过互联网提供安全路径,通过防火墙到虚拟机。
历史和发展
版本1.x
1995年,芬兰赫尔辛基科技大学的研究员TatuYlönen设计了第一个版本的协议(现在称为SSH-1),并在他的大学网络上发起了密码嗅探攻击。SSH的目标是取代早期的rlogin,TELNET,ftp和rsh协议,它们不提供强认证,也不保证机密性。Ylönen将其实施作为免费软件发布@L_502_103@在1995年7月,该工具迅速流行起来。到1995年底,SSH用户群已增至50个国家的20,000名用户。
1995年12月,Ylönen成立了SSH通信安全公司,以推广和开发SSH。原始版本的SSH软件使用了各种免费软件,例如GNU libgmp,但由SSH Communications Security发布的更新版本演变为日益专有的软件。
版本2.x
“Secsh”是负责SSH协议第2版的IETF工作组的官方Internet工程任务组(IETF)名称。2006年,该协议的修订版本SSH-2被采纳为标准。该版本与SSH-1不兼容。SSH-2通过SSH-1提供安全性和功能改进。例如,通过Diffie-Hellman密钥交换和通过消息认证码进行强大的完整性检查,可以提供更好的安全性。SSH-2的新功能包括通过单个SSH连接运行任意数量的shell会话。由于SSH-2在SSH-1上的优越性和普及性,一些实现例如Lsh和Dropbear仅支持SSH-2协议。
版本1.99
在2006年1月,在版本2.1建立之后,RFC 4253指出,支持2.0和以前版本的SSH的SSH服务器应该将它的版本识别为1.99。这不是一个真正的版本,而是一种识别向后兼容性的方法。
OpenSSH和OSSH
在1999年,开发人员想要一个免费的软件版本,然后回到原来的1.2.12版本的原始SSH程序中,该程序是在开源许可证下最后发布的。BjörnGrönvall的OSSH随后从该代码库开发而来。此后不久,OpenBSD的开发分叉Grönvall的代码,并在其上做了广泛的工作,创造OpenSSH的,它随2.6版本的OpenBSD。从这个版本开始,一个“可移植性”分支形成了将OpenSSH移植到其他操作系统。
截至2005年,OpenSSH是最受欢迎的SSH实现中的一种,在大量操作系统中默认使用。OSSH同时已经过时。OpenSSH继续保持并支持SSH-2协议,已经从OpenSSH 7.6版本的代码库中删除了对SSH-1的支持。
用途
SSH是一种协议,可用于许多平台上的许多应用程序,包括大多数Unix变体(Linux,BSD包括Apple的macOS和Solaris)以及Microsoft Windows。下面的一些应用程序可能需要仅与特定SSH客户端或服务器兼容的功能。例如,使用SSH协议来实现VPN是可能的,但目前只有OpenSSH服务器和客户端实现。
- 要登录到远程主机上的shell(替换Telnet和rlogin)
- 为了在远程主机上执行单个命令(替换rsh)
- 为了设置自动(无密码)登录到远程服务器(例如,使用OpenSSH)
- 安全的文件传输
- 结合rsync备份,有效且安全地复制和镜像文件
- 为转发或隧道的端口(不要与混淆VPN,其路由不同网络之间的数据包,或桥2个广播域到一个)。
- 用作完整的加密VPN。请注意,只有OpenSSH服务器和客户端支持此功能。
- 对于从远程主机转发X(可能通过多个中间主机)
- 用于通过与支持SOCKS协议的SSH客户端的加密代理连接来浏览网页。
- 使用SSHFS将本地计算机上的目录作为文件系统安全地挂载到远程服务器上。
- 用于通过上述一种或多种机制自动远程监控和管理服务器。
- 用于支持SSH的移动或嵌入式设备上的开发。
文件传输协议
Secure Shell协议用于多种文件传输机制。
- 安全拷贝(SCP),通过SSH从RCP协议发展而来
- rsync,旨在比SCP更有效
- SSH文件传输协议(SFTP),一种安全的FTP替代品(不要与SSH或FTPS上的FTP混淆)
- 1998年发布的通过shell协议传输的文件(又名FISH),通过SSH从Unix shell命令演变而来
- 快速和安全协议(FASP),又名Aspera,使用SSH进行控制,使用UDP端口进行数据传输。