跳转至内容

OpenSSH/概述

100% developed
来自维基教科书,开放世界中的开放书籍

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

OpenSSH 首次发布是在 1999 年末。它是网络通勤、远程访问和远程办公非常长且有用历史中的最新一步。

OpenSSH 的历史

[编辑 | 编辑源代码]

OpenSSH 的第一个版本是 1999 年 12 月作为 OpenBSD 2.6 的一部分发布的。源代码最初来自对最后一个可用的开放版本,特别是 SSH 1.2.12 的重写[2]。SSH 后来成为 Tectia SSH。


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

远程访问的早期

[编辑 | 编辑源代码]

一些激发了对 SSH 需求的工具,自互联网诞生之初,甚至从互联网诞生之前就已经存在。远程访问一直是该概念的根本部分,自想法阶段以来,这种访问的性质和功能随着网络在规模、范围和使用方面的演变而不断发展。请参阅 Éric Lévénez 编写的 *Lévénez Unix 时间线* 的网页版[3],以概述系统开发,以及 Robert H Zakon 编写的 *Hobbes' Internet 时间线* 的网页版[4],以概述互联网的发展。

1969

  • Telnet 是最初的 ARPAnet 应用协议之一,在 RFC 15(1969 年 9 月)中命名。它用于本地访问远程站点的主机。Telnet 在两年后开始描述,如 RFC 137RFC 139RFC 318 以及其他 RFC,包括 RFC 97。这是一个很好的分界点,用于区分 Telnet。

1971

  • Thompson Shell 由 Ken Thompson 创建,是对旧的基于文本的用户界面的改进,即 shell。这个新的 shell 允许重定向,但它只是一个用户界面,而不是用于脚本编写。
  • 同年,FTP(文件传输协议)在 RFC 114 中进行了描述。一个关键目标是通过允许网络上任何主机上的用户使用任何协作主机的文件系统来促进网络上计算机的使用。

1978

  • Bill Joy 创建了 BSD 的 C shell,以其使用的类 C 语法而得名。它允许作业控制、历史替换和别名,这些功能我们在今天的界面中也发现了。
  • 同年,贝尔实验室的 Steve Bourne 创建了 Bourne Shell[5]。它是今天大多数发行版中使用的默认 shell 的鼻祖:**ksh** 和 **bash**。

1983

  • 远程文件复制实用程序 **rcp** 出现在 4.2 BSD 中。**rcp** 通过网络将文件复制到其他主机,使用 4.2 BSD 开始出现的 **rsh** 来执行其操作。与 **telnet** 和 **ftp** 一样,所有密码、用户名和数据都以明文形式进行传输。**rsh** 和 **rcp** 都是 **rlogin** 套件的一部分。

1991

  • PGP 由麻省理工学院的 Philip Zimmermann 编写[6],为加密的电子通信开辟了新的领域,其目标是维护网络上的公民自由、确保个人隐私、使美国加密合法化以及保护商业通信。与 SSH 一样,它使用公钥/私钥对的非对称加密。

1993

  • 来自麻省理工学院 Athena 项目的 Kerberos V (RFC 1510) 身份验证服务[7] 提供了一种在开放的、不安全的网络上进行身份验证的方法。Kerberos 最初开始于 1988 年。

SSH - 先开放后封闭

[编辑 | 编辑源代码]

1995

  • 当时在赫尔辛基理工大学工作的 Tatu Ylönen 开发了第一个 SSH 协议和程序,并根据计算机科学、软件工程和高级开发中的规范,在开放许可下发布了它们[8][9]

1995?

  • Björn Grönvall 找出了最新的开放版本 **ssh**,即 1.2.12 版[10] [11]。他和 Holger Trapp 进行了最初的工作,以免费发布该发行版,从而产生了 OSSH。

1996

  • SSH2 协议定义为

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 一起发布[12]

2000

  • Markus Friedl 在 6 月发布的 OpenSSH 2.0 版中添加了 SSH 2 协议支持[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 旧协议的服务器支持。

2023

  • OpenSSH 9.5 ssh-keygen(1) 默认生成 Ed25519 密钥,而不是旧的 RSA 密钥。

注意:OpenSSH 可在全球任何地方使用,因为它只使用不受软件专利、商业方法专利、算法专利等限制的算法。这些类型的专利不适用于欧洲,只有物理发明才能在欧洲获得专利,但在世界某些地区,这些问题确实存在。欧洲的中小企业一直积极参与政治,以保持这种优势。

为什么要使用 OpenSSH?

[编辑 | 编辑源代码]

自 1996 年互联网商业化以来,发生了许多变化。它曾经是大学和政府的研究网络,如果你当时在网上,你很可能应该在那里。虽然它远非乌托邦,但任何不当行为通常可以迅速缩小到相关个人并轻松处理,通常只需一个电话或几封电子邮件。当时很少有会话被加密,密码和用户名都是以明文形式传递的。

到那时,万维网已经发展了几年,并且正在经历爆炸式增长。1996 年在线网页服务器的估计数量从年初的 100,000 台增长到年底的近 650,000 台[14]。当将其他类型的服务器包含在这些数据中时,估计的年底数量超过了 16,000,000 个主机,代表大约 828,000 个域名[14]

如今,主机从连接到网络的那一刻起就受到恶意扫描。任何未加密的流量都会被扫描和解析以寻找用户名、密码和其他敏感信息。目前,最大的间谍威胁来自私营公司,但政府、个人和有组织犯罪也并非没有存在。

从一个主机到另一个主机的每个连接都经过许多网络,每个数据包可能走相同的路线或不同的路线到达并返回。此示例显示了从学生计算机到搜索引擎的三个组织之间的 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 的作用

[edit | edit source]

OpenSSH 套件提供以下功能:

  • 加密远程访问,包括隧道化不安全的协议。
  • 加密文件传输
  • 运行远程命令、程序或脚本,以及前面提到的:
  • 替换rshrlogintelnetftp

更具体地说,这意味着以下不希望出现的活动将被阻止:

  • 窃听通过网络传输的数据。
  • 操纵网络中间元素(例如路由器)中的数据。
  • 地址欺骗,攻击主机通过发送带有受信任主机源地址的数据包来伪装成受信任的主机。
  • IP 源路由

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

  • 开放标准
  • 灵活的许可证 - 强调开发人员的自由
  • 使用以下密码的强加密
    • AES
    • ChaCha20[15]
    • RSA
    • ECDSA
    • Ed25519
  • 强身份验证,支持的方法:gssapi-with-mic, hostbased, keyboard-interactive, none , passwordpublickey[16]
    • 公钥:自 2015 年 3 月(OpenSSH 6.8)以来可以使用多个密钥进行身份验证[17]
    • 一次性密码
    • Kerberos
    • 加密狗
  • 内置 SFTP
  • 数据压缩
  • 端口转发
    • 加密传统协议
    • 用于 X Window 系统的加密 X11 转发
  • 密钥代理
  • 使用以下方法进行单点登录
    • 身份验证密钥
    • 代理转发
    • 票证传递
    • Kerberos
    • AFS

OpenSSH 不能做什么

[edit | edit source]

OpenSSH 是一款非常实用的工具,但其大部分有效性取决于正确使用。它无法保护以下任何情况。

  • 错误配置、误用或滥用。
  • 受损系统,尤其是 root 帐户被破坏的系统。
  • 不安全或不适当的目录设置,尤其是主目录设置。

OpenSSH 必须正确配置,并且在正确配置的系统上才能发挥作用。安排这两者并不难,但由于每个系统都是唯一的,因此没有一刀切的解决方案。正确的配置取决于系统和 OpenSSH 使用的方式。

如果您从一个主机登录到服务器,并且攻击者控制了任一侧的 root 帐户,他可以通过读取伪终端设备来监听您的会话,因为即使 SSH 在网络上是加密的,它也必须以明文形式与终端设备通信。

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

最后但并非最不重要的一点是,如果 OpenSSH 设置为允许所有人访问,无论是故意还是意外,它都会这样做。



参考文献

[edit | edit source]
  1. "当前扫描结果的统计数据". OpenSSH.com. 2008.
  2. "OpenSSH 历史". OpenSSH. 检索于 2012-11-17.
  3. "UNIX 历史时间线". Éric Lévénez. 检索于 2011-02-17.
  4. "霍布斯互联网时间线". 罗伯特·霍布斯·扎孔. 检索于 2011-02-17.
  5. 霍华德·达达赫 (2009). "编程语言 A 到 Z:Bourne shell 或 sh". Computerworld. 检索于 2011-02-18.
  6. 菲尔·齐默曼 (1991). "我为什么要写 PGP". 麻省理工学院. 检索于 2011-02-18.
  7. 比尔·布莱恩特;西奥多·茨奥 (1988). "设计身份验证系统:四幕对话". 检索于 2011-02-17.
  8. "帮助:SSH 1.0.0 许可证". FUNET. 检索于 2013-04-13.
  9. Tatu Ylönen (1995-07-12). "公告:Ssh(安全外壳)远程登录程序". news://comp.security.unix. 检索于 2011-11-26. {{cite web}}: 外部链接在 |publisher= (帮助)
  10. "帮助:SSH 1.2.12 许可证". friedl. 检索于 2011-02-17.
  11. "帮助:SSH 1.2.12.92 许可证". friedl. 检索于 2011-02-17.
  12. https://www.openssh.com/history.html
  13. "OpenSSH 项目历史和贡献者". OpenSSH. 检索于 2011-03-10.
  14. a b Robert H'obbes' Zakon. "霍布斯' 互联网时间线". Zakon Group LLC. 检索于 2011-02-17.
  15. Damien Miller (2013-11-29). "ChaCha20 和 Poly1305 在 OpenSSH 中". 检索于 2014-04-26.
  16. https://linux.die.net/man/5/sshd_config
  17. https://lists.mindrot.org/pipermail/openssh-unix-announce/2015-March/000120.html

 


华夏公益教科书