OpenSSH/概述


OpenSSH套件提供了安全的远程访问和文件传输功能。自首次发布以来,它已发展成为最广泛使用的SSH协议实现。在其存在的前十年,SSH在很大程度上取代了旧有的无加密工具和协议。OpenSSH客户端默认包含在大多数操作系统发行版中,包括MacOS、Linux、BSD、AIX和Solaris。每一天你使用互联网时,实际上是在使用并依赖成千上万台通过OpenSSH进行操作和维护的机器。2008年的一项调查显示,在运行的SSH服务器中,超过80%是OpenSSH。

OpenSSH首次发布于1999年底。它是网络计算、远程访问和远程办公这一漫长且有益历史的最新一步。

OpenSSH的历史
OpenSSH的首次发布是在1999年12月,作为OpenBSD 2.6的一部分。源代码最初来自于对SSH最后一个公开版本(具体来说是ssh 1.2.12)的重写。SSH随后发展为Tectia SSH。

OpenSSH的持续开发由OpenBSD小组进行。核心开发首先在OpenBSD上进行,然后可移植性团队将更改移植到其他平台。今天,OpenSSH已经成为几乎所有服务器系统以及许多网络设备(如路由器、交换机和网络存储)的核心组成部分。最初的几步在许多方面都是最大的。

远程访问的早期阶段
启发SSH需求的一些工具自互联网开始时或几乎从一开始就已存在。远程访问从一开始就成为了这一概念的基本部分,并且随着网络在规模、范围和使用上的演变,这种访问的性质和能力也在不断发展。可以参考Éric Lévénez的《Lévénez Unix时间轴》,以及Robert H. Zakon的《霍布斯互联网时间轴》,了解系统和互联网发展的概况。

1969年

Telnet是最早的ARPAnet应用协议之一,最早在1969年9月的RFC 15中提出。它用于本地访问远程站点的主机。Telnet在两年后通过RFC 137、RFC 139、RFC 318等文档进行描述。这是划定Telnet的重要节点之一。
1971年

Ken Thompson的Thompson Shell是对旧有文本用户界面的改进。这个新的Shell允许重定向,但仅仅是用户界面,并不是脚本语言。
同年,FTP(文件传输协议)在RFC 114中被描述。其主要目标是通过允许网络中任何主机的用户使用任何合作主机的文件系统,来促进计算机网络的使用。
1978年

Bill Joy创建了BSD的C shell,它的语法类似于C语言,因此得名。它支持作业控制、历史替换和别名,这些特性我们今天在大多数接口中都能看到。
同年,Bell Labs的Steve Bourne创建了Bourne Shell,它是今天大多数Linux发行版默认Shell(如ksh和bash)的前身。
1983年

远程文件复制工具rcp出现在4.2 BSD中。rcp通过rsh将文件复制到网络中的其他主机,rsh也从4.2 BSD开始出现,执行操作时同样没有加密。和Telnet、FTP一样,所有密码、用户名和数据都以明文方式传输。rsh和rcp是rlogin工具套件的一部分。
1991年

PGP(由MIT的Philip Zimmermann编写)为加密电子通信开辟了新天地,旨在保护在线公民自由、确保个人隐私、保持美国合法加密以及保护商业通信。和SSH一样,它使用公钥/私钥对的非对称加密。
1993年

MIT的项目Athena推出了Kerberos V(RFC 1510)身份认证服务,提供了一种在开放、不安全网络上进行身份验证的方式。Kerberos最早于1988年启动。
SSH - 开源后闭源
1995年

当时的赫尔辛基技术大学的Tatu Ylönen开发了首个SSH协议和程序,并按照计算机科学、软件工程及高级开发的惯例发布了开放许可证。
1995年?

Björn Grönvall找出了最新的公开版本ssh,即版本1.2.12。他和Holger Trapp进行了最初的工作,最终使该版本变得开源,形成了OSSH。
1996年

SSH2协议被定义

OpenSSH
1999年

OpenSSH基于OSSH开始开发。Niels Provos、Theo de Raadt和Markus Friedl在移植到OpenBSD的过程中开发了加密组件,这些组件最终构成了我们今天所知的OpenSSH。Dug Song、Aaron Campbell和许多其他人提供了各种非加密方面的贡献。Bob Beck解决了OpenSSL库的问题。Damien Miller、Philip Hands等人开始将OpenSSH移植到Linux。最终,OpenSSH 1.2.2于1999年12月1日与OpenBSD 2.6一起发布。
2000年

Markus Friedl为OpenSSH 2.0版本添加了SSH 2协议的支持,并于6月发布。[13] OpenSSH 2.0随OpenBSD 2.7一起发布。Niels Provos和Theo de Raadt进行了大部分检查,Bob Beck更新了OpenSSL。Markus还在同年晚些时候添加了对SFTP协议的支持。
2000年9月,美国等待RSA算法专利到期的漫长时光终于结束。根据1972年的《欧洲专利公约》,欧洲的专利法规定,软件、算法、商业方法或文献等不受专利保护,这与美国的反商业化情况不同。虽然欧洲的这一自由现在岌岌可危。
SSH Tectia再次更改了许可证。
2001年

Damien Miller完成了SFTP客户端,并于2月发布。
SSH2成为默认协议
2008年

为sshd增加了内置的chroot支持。
2010年

从OpenSSH 5.4开始,旧版协议SSH1默认被禁用。
2014年

从OpenSSH 6.7开始,OpenSSH的基础版和可移植版本可以在某些加密功能中使用LibreSSL代替OpenSSL。
2016年

OpenSSH 7.4移除了对SSH1旧协议的服务器支持。
2019年

通过OpenSSH 8.0,SSH协议成为首批推出后量子算法的协议之一。
2023年

OpenSSH 9.5版本中,ssh-keygen(1)默认生成Ed25519密钥,而不再使用旧版的RSA密钥。
备注:OpenSSH可以在全世界范围内使用,因为它只使用那些不受软件专利、商业方法专利、算法专利等限制的算法。这些类型的专利在欧洲不适用,只有物理发明才能在欧洲申请专利,但在全球一些地区这些问题确实存在。欧洲的中小型企业一直在积极参与政治,维护这一优势。

为何使用OpenSSH?
自1996年互联网商业化开始以来,许多事情发生了变化。互联网曾经是一个大学和政府的研究网络,如果你在那时上网,几乎可以肯定你是应该在那里的。虽然那时远非乌托邦,但任何不当行为通常都能迅速追溯到涉事个人并轻松处理,通常只需要一个电话或几封电子邮件。那时几乎没有会话加密,密码和用户名都是明文传输的。

到那时,万维网已经发展了几年,并正在经历爆炸性的增长。1996年年初,网络上的网站服务器数量约为10万个,到年末接近65万个。如果包括其他类型的服务器,这一数字到年底估计超过1600万个主机,约828,000个域名。

如今,主机在连接到网络的瞬间就会受到敌对扫描。任何未加密的流量都会被扫描和解析,查找用户名、密码及其他敏感信息。目前,最大的间谍威胁来自私营公司,但政府、个人和有组织的犯罪团伙也不容忽视。

从一个主机到另一个主机的每次连接都要经过许多网络,每个数据包可能沿着相同或不同的路径往返。这一例子展示了从学生计算机到搜索引擎的13跳:

% /usr/sbin/traceroute -n www.google.com
traceroute: Warning: www.google.com has multiple addresses; using 74.125.95.106
traceroute to www.l.google.com (74.125.95.106), 30 hops max, 40 byte packets
 1 xx.xx.xx.xx           0.419 ms	0.220 ms	0.213 ms	University of Michigan
 2 xx.xx.xx.xx           0.446 ms	0.349 ms	0.315 ms	Merit Network, Inc.
 3 xx.xx.xx.xx           0.572 ms	0.513 ms	0.525 ms	University of Michigan
 4 xx.xx.xx.xx           0.472 ms	0.425 ms	0.402 ms	University of Michigan
 5 xx.xx.xx.xx           0.647 ms	0.551 ms	0.561 ms	University of Michigan
 6 xx.xx.xx.xx           0.945 ms	0.912 ms	0.865 ms	University of Michigan
 7 xx.xx.xx.xx           6.478 ms	6.503 ms	6.489 ms	Merit Network, Inc.
 8 xx.xx.xx.xx	         6.597 ms	6.590 ms	6.604 ms	Merit Network, Inc.
 9 216.239.48.154       64.935 ms	6.848 ms	6.793 ms	Google, Inc.
10 72.14.232.141        17.606 ms	17.581 ms	17.680 ms	Google, Inc.
11 209.85.241.27        17.736 ms	17.592 ms	17.519 ms	Google, Inc.
12 72.14.239.193        17.767 ms	17.778 ms	17.930 ms	Google, Inc.
13 74.125.95.106        17.903 ms	17.835 ms	17.867 ms	Google, Inc.:

网络非常庞大。如今,在客户端和服务器之间出现15到20跳的情况并不罕见。任何位于数据包经过的子网中的机器,如果数据包未加密,都能轻松窃听。

OpenSSH的功能
OpenSSH套件提供以下功能:

  • 加密的远程访问,包括隧道化不安全协议。
  • 加密的文件传输
  • 运行远程命令、程序或脚本,且可以替代rsh、rlogin、telnet和ftp等工具

更具体地说,它能够防止以下不良活动:

  • 网络上传输的数据被窃听。
  • 数据在网络中间节点(如路由器)被篡改。
  • 地址伪造攻击,其中攻击者通过伪装成受信任的主机发送带有受信任主机源地址的数据包。
  • IP源路由攻击

作为一个自由软件项目,OpenSSH提供:

  • 开放标准
  • 灵活的许可证——强调开发者的自由
  • 强大的加密,支持以下加密算法:
    • AES
    • ChaCha20
    • RSA
    • ECDSA
    • Ed25519
  • 强认证,支持的方法:gssapi-with-mic、hostbased、keyboard-interactive、none、password和publickey
  • 公钥:自2015年3月(OpenSSH 6.8)起,支持使用多个密钥进行认证[19]
  • 一次性密码
  • Kerberos
  • 硬件加密密钥
  • 内置SFTP
  • 数据压缩
  • 端口转发
  • 加密旧协议
  • 对X11转发的加密支持
  • 密钥代理
  • 单点登录(SSO),支持以下方式:
    • 认证密钥
    • 代理转发
    • 票证传递
    • Kerberos
    • AFS

OpenSSH的局限性
OpenSSH是一个非常有用的工具,但它的效果很大程度上依赖于正确使用。它无法保护以下情况:

  • 错误配置、滥用或不当使用。
  • 被攻破的系统,尤其是root账户被攻破的情况。
  • 不安全或不当的目录设置,特别是家目录设置。

OpenSSH必须在正确配置的系统上正确配置,才能发挥作用。正确配置系统和OpenSSH并不困难,但由于每个系统都是独特的,没有一刀切的解决方案。正确的配置取决于系统和OpenSSH的用途。

如果你从一个主机登录到一个服务器,而攻击者控制了其中一方的root权限,他可以通过读取伪终端设备来窃听你的会话,因为即使SSH在网络上传输时是加密的,它必须与终端设备以明文通信。

如果攻击者能更改你的家目录中的文件,例如通过网络文件系统,他可能会欺骗SSH。

最后但同样重要的是,如果OpenSSH设置为允许任何人访问,无论是故意还是无意的,它都会成为安全隐患。

Last modified: Sunday, 19 January 2025, 7:58 PM