OpenSSH :SSH协议的免费开源实现

更新时间:2024-09-21 05:30

OpenSSH 是 SSH(Secure SHell)协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、rcp ftp、rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。

软件简介

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。使用频率最高的场合类unix系统,但是Windows操作系统也能有限度地使用SSH。2015年,微软宣布将在未来的操作系统中提供原生SSH协议支持。在设计上,SSH是Telnet和非安全shell的替代品。Telnet和Berkeleyrlogin、rsh、rexec等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击。SSH旨在保证非安全网络环境(例如互联网)中信息加密完整可靠。不过,SSH也被指出有被嗅探甚至解密的漏洞。早在2011年,中国的互联网审查机构已经有能力针对SSH连接的刺探及干扰。而后爱德华·斯诺登泄露的文件也指出,美国国家安全局有时能够把SSH协议传输的信息解密出来,从而读出SSH会话的传输内容。2017年7月6日,非营利组织维基解密确认美国中央情报局已经开发出能够在Windows或Linux操作系统中窃取SSH会话的工具。

在OpenSSH的发展历程中,也曾发现过一些安全漏洞。例如,在OpenSSH 5.2版本之前,攻击者可以以2−14的成功概率恢复多达14位明文。这个漏洞与CBC加密模式有关。OpenSSH 6.8到6.9存在本地特权升级漏洞(CVE-2015-6565),原因是世界可写(622)的TTY设备,这被认为是一种拒绝服务漏洞。恶意或受损的OpenSSH服务器可以利用一个依赖于OpenSSH客户端的未记录的连接恢复功能的漏洞来读取客户端的敏感信息,这个功能称为漫游,它默认在客户端上启用,但在OpenSSH服务器上不受支持。这适用于OpenSSH客户端的5.4(2010年3月8日发布)到7.1版本,并在2016年1月14日发布的OpenSSH 7.1p2中修复。与此漏洞相关的CVE编号是CVE-2016-0777(信息泄漏)和CVE-2016-0778(缓冲区溢出)。

OpenSSH是使用SSH透过计算机网络加密通讯的实现。它是取代由SSH Communications Security所提供的商用版本的开放源代码方案。目前OpenSSH是OpenBSD的子计划。OpenSSH常常被误认以为与OpenSSL有关联,但实际上这两个计划的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。

发展历程

OpenSSH 支持 SSH 协议的版本 1.3、1.5、和 2。自从 OpenSSH 的版本2.9以来,默认的协议是版本2,该协议默认使用 RSA 钥匙。

OpenSSH最初是由Tatu Ylönen开发的免费SSH程序的一个分支,后来,Ylönen的SSH的版本成为SSH通信安全公司提供的专有软件。OpenSSH于1999年首次发布,并目前作为OpenBSD操作系统的一部分进行开发。OpenSSH是由OpenBSD开发人员创建的,作为Tatu Ylönen原始SSH软件的替代品,后者现在是专有软件。OpenSSH首次出现在OpenBSD 2.6中。第一个便携版发布于1999年10月。此后的发展包括添加密码、削减对OpenSSL的依赖以及扩展以便为受信任的主机进行公钥发现和轮换。2015年10月19日,微软宣布OpenSSH将在Microsoft Windows上获得本地支持,并通过PowerShell访问,发布了一个早期实现,并公开了代码。基于OpenSSH的客户端和服务器程序自Windows 10的1803版本以来已经包含在其中。SSH客户端和密钥代理默认启用并可用,而SSH服务器是可选的按需功能。2019年10月,OpenSSH 8.1中添加了对RAM中静止的私钥的保护,以防止猜测和内存侧信道攻击。

服务与功能

OpenSSH服务,sshd,是一个典型的独立守护进程(standalone daemon),但也可以根据需要通过网络守护进程(Internet Daemon)-inetd(注3)或Ineternet Daemon's more modern-xinted加载。OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置。

程序主要包括了几个部分:

- ssh:rlogin与Telnet的替代方案。

- scp、sftp:rcp的替代方案,将文件复制到其他电脑上。

- sshd:SSH服务器。

- ssh-keygen:产生RSA或DSA密钥,用来认证用。

- ssh-agent、ssh-add:帮助用户不需要每次都要输入密钥密码的工具。

- ssh-keyscan:扫描一群机器,并记录其公钥。

OpenSSH包括建立安全通道的能力,通过该通道,发送到本地客户端Unix域套接字或本地客户端TCP端口的数据可以被“转发”以在服务器端进行路由。数据的转发是双向的,意味着任何返回通信都会以相同的方式被转发回客户端;这被称为“SSH隧道”,它可以用于在单个SSH连接上复用额外的TCP连接自2004年以来,以隐藏连接,加密其他未加密的协议,并通过发送/接收所有类型的数据来规避防火墙。例如,使用OpenSSH连接到远程主机时,可能会自动创建X Window系统隧道,以及其他协议,如HTTP和VNC,可以轻松地进行转发。通过TCP隧道传输TCP封装的有效载荷(如PPP)通过基于TCP的连接(如SSH的端口转发)被称为“TCP-over-TCP”,这样做可能会导致传输性能的显著损失,这就是为什么虚拟专用网络软件可能会使用比TCP更简单的协议来进行隧道连接。然而,在使用OpenSSH的端口转发时,通常不会出现这个问题,因为许多用例不涉及TCP-over-TCP隧道。此外,一些第三方软件包括对通过SSH进行隧道的支持。这些包括DistCC、电脑视疲劳综合症、rsync和Fetchmail。在一些操作系统上,可以使用诸如sshfs(使用FUSE)之类的工具通过SSH挂载远程文件系统。可以使用OpenSSH创建一个临时的SOCKS代理服务器。这比普通端口转发更灵活。从4.3版本开始,OpenSSH实现了一个OSI第2/3层基于tun的VPN。这是OpenSSH隧道功能中最灵活的,允许应用程序透明地访问远程网络资源,而无需修改以使用SOCKS。

OpenSSH支持多种公钥类型,包括但不限于ssh-dss、ssh-rsa、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384、ecdsa-sha2-nistp521、ssh-ed25519、rsa-sha2-256、rsa-sha2-512、ecdsa-sk、ed255成都地铁19号线sk和NTRU Prime-x25519。其中,自2015年发布的OpenSSH 7.0起,ssh-dss在运行时被禁用,而自2021年发布的OpenSSH 8.8起,ssh-rsa也在运行时被禁用。

相关事件

2001年2月,SSH通信安全公司的主席兼首席技术官Tatu Ylönen通知OpenSSH开发邮件列表,公司打算主张对“SSH”和“Secure Shell”商标的所有权,并寻求将对协议的引用更改为“SecSH”或“secsh”,以保持对“SSH”名称的控制。他建议OpenSSH改变其名称以避免诉讼,但开发人员反对了这一建议。OpenSSH的开发人员和Ylönen本人都是IETF工作组的成员,该工作组正在开发新的标准;在几次会议后,该组拒绝了Ylönen的重命名协议的请求,理由是担心这会为其他商标索赔案件开了一个坏先例。与会者认为“Secure Shell”和“SSH”都是通用术语,不能成为商标。

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: