SSH 的全称是什么

2025年03月17日 | 阅读 9 分钟

SSH:安全外壳协议

SSH 是 Secure Shell 的缩写。它也称为安全套接字外壳。安全外壳 (SSH) 是一种加密网络协议,用于在不安全的网络上安全地运行网络服务。SSH 应用程序以客户端-服务器架构为基础,该架构将 SSH 客户端实例与 SSH 服务器连接起来。

SSH Full Form

SSH 作为 Telnet 和不安全的远程 Unix shell 协议(如 Berkeley 远程 shell (rsh) 及其关联的 rlogin 和 rexec 协议)的后继者而创建,它为使用不安全、明文身份验证令牌通信的类 Unix 操作系统而设计。

定义

我们可以通过多种方式应用 SSH。最简单的实现方式是使用通信通道和网络连接两端的自动生成的公钥-私钥对加密数据。然后,它使用密码对用户进行身份验证。当用户手动生成公钥-私钥对时,一旦建立密钥对,身份验证几乎就完成了,从而无需密码提示即可立即启动会话。

SSH Full Form

在这种情况下,所有者会保密相应的私钥,并将公钥安装在所有必须授予所有者访问权限的机器上。尽管私钥是身份验证的基础,但在进行身份验证时,密钥永远不会通过网络发送。SSH 确认公钥的提供者也持有相应的私钥。

在所有 SSH 版本中,在接受公钥作为合法公钥并附带 ID 之前,将未知公钥与已知私钥进行关联至关重要。如果未经验证就接受来自攻击者的公钥,那么就等于接受了一个不可信的攻击者作为合法用户。

创建

SSH 最初由芬兰计算机科学家 Tatu Ylönen 于 1995 年创建。该协议套件的进一步开发在多个开发团队中进行,导致了各种实现迭代。有适用于所有流行操作系统(包括嵌入式系统)的实现。OpenSSH 由 OpenBSD 的创建者于 1999 年作为开源软件提供,它是最常用的软件堆栈。

SSH 密钥的认证管理

在类 Unix 系统上,批准的公钥列表通常保存在用户主目录下的 ~/.ssh/authorized_keys 文件中,该文件具有远程登录权限。只有当该文件不能被除所有者和 root 以外的任何人修改时,SSH 才认为该文件有效。当远程端的公钥和本地端的匹配私钥都存在时,就不再需要密码了。但是,我们可以使用密码短语来锁定私钥以获得更高的安全性。我们还可以搜索常用位置中的密钥,并使用命令行选项提供其完整路径(ssh 的 -i 选项)。

SSH Full Form

SSH 还提供自动密钥生成加密的基于密码的身份验证。在这种情况下,攻击者可能会冒充可信服务器端,请求密码并获取它(中间人攻击)。在服务器端,我们可以关闭密码身份验证。

用途

SSH 使用客户端-服务器范例。通常,SSH 用于登录。它还可以隧道 TCP 端口、转发 X11 连接以及在远程系统上执行命令。通常,使用 SSH 客户端应用程序连接到允许远程连接的 SSH 守护程序。两者通常都存在于大多数现代操作系统中,例如 macOS、Linux 发行版、OpenBSD、FreeBSD、NetBSD、Solaris 和 OpenVMS。有些版本是专有的、免费软件和开源的,具有不同程度的复杂性和全面性(例如 PuTTY 和 Cygwin 和 OpenSSH 附带的 OpenSSH 版本)。值得注意的是,在 Windows 10 版本 1709 之前,SSH 默认不包含在 Windows 版本中。

免费开源的 Windows 应用程序 WinSCP 提供了类似的文件管理(同步、复制和远程删除)功能,它使用 PuTTY 作为后端。无需在客户端计算机上安装,WinSCP 和 PuTTY 可以打包运行,直接从 USB 驱动器运行。通常需要启用 Windows 设置应用中的某项功能来设置 SSH 服务器。

为了处理连接问题并避免将基于云的虚拟机直接暴露给 Internet 的安全风险,SSH 在云计算中至关重要。可以通过防火墙通过 SSH 隧道将虚拟计算机安全地连接到 Internet。对于此协议,IANA 已指定 TCP 端口 22、UDP 端口 22 和 SCTP 端口 22。

早在 2001 年,IANA 就将 SSH 服务器的默认 TCP 端口 22 列为众所周知的端口之一。面向连接的传输层协议 SCTP 可以替代 TCP 来运行 SSH。

历史演进

第一次迭代

1995 年,芬兰赫尔辛基理工大学的研究员 Tatu Ylönen 在其机构的网络上遭受密码嗅探攻击的启发,创建了该协议的初始版本(如今称为 SSH-1)。

SSH 被设计用来取代以前的协议,包括 rlogin、TELNET、FTP 和 rsh,这些协议缺乏强大的身份验证和保密保证。Ylönen 将他的应用程序作为免费软件提供。1995 年 7 月,该设备迅速普及。到 1995 年底,已有 20,000 名 SSH 用户遍布 50 个国家。

为了推广和发展 SSH,Ylönen 于 1995 年 12 月成立了 SSH Communications Security。SSH 程序的第一版使用了 GNU libgmp 等各种免费软件组件,但后来 SSH Communications Security 提供的版本发展成为越来越专有的软件。据估计,到 2000 年,用户已达 200 万。

第二次迭代

互联网工程任务组 (IETF) 在其官方文档中将负责创建 SSH 协议版本 2 的工作组指定为“Secsh”。

SSH-2,一个改进的协议版本,于 2006 年成为标准。此版本与 SSH-1 不兼容。SSH-2 提供了比 SSH-1 更强大的功能和安全性升级。例如,Diffie-Hellman 密钥交换和通过消息认证码实现的强大完整性验证提供了更高的安全性。SSH-2 的新功能之一是能够在单个 SSH 连接上传输无限数量的 shell 会话。由于 SSH-2 比 SSH-1 更先进且被广泛使用,因此某些实现,例如 libssh (v0.8.0+)、Lsh 和 Dropbear,仅支持 SSH-2。

版本 1.99

2006 年 1 月,RFC 4253 要求支持 2.0 及更早版本的 SSH 服务器将其协议版本指示为 1.99,远在版本 2.1 开发之后。此版本号用于指示向后兼容性,而不是代表之前的软件修订。

OSSH 和 OpenSSH

SSH Full Form

自 1999 年原始 SSH 程序发布的最后一个版本 1.2.12 以开源许可证分发以来,开发人员一直在致力于免费软件版本。这被用作 Björn Grönvall 的 OSSH 程序的基金。不久之后,OpenBSD 团队克隆了 Grönvall 的工作,创建了 OpenSSH,它包含在 OpenBSD Release 2.6 中。他们从该版本创建了一个“可移植性”分支,将 OpenSSH 移植到不同的操作系统。

截至 2005 年,OpenSSH 是使用最广泛的 SSH 实现,它是许多操作系统发行版中的默认版本。在 OpenSSH 7.6 版本中从代码库中删除 SSH-1 支持后,OpenSSH 仍在更新并支持 SSH-2 协议。与此同时,OSSH 不再具有相关性。

用途

用户“josh”作为隧道 X11 程序通过 SSH 的示例,从本地计算机“foo fighter”通过“SSH”连接到远程计算机“tengwar”以运行 xeyes。人们使用 Windows SSH 客户端 PuTTY 来访问 OpenWrt。

SSH 是一种与许多系统兼容的协议,包括 Microsoft Windows 和大多数 Unix 变体(Linux、BSD、包括 Apple 的 macOS 和 Solaris)。以下应用程序可能需要独有于或兼容特定 SSH 客户端或服务器的功能。例如,目前只能使用 SSH 协议的 OpenSSH 服务器和客户端实现来构建 VPN。

  • 访问远程主机的 shell(替换 Telnet 和 rlogin)
  • 在远程主机上执行单个命令(替换 rsh)
  • 配置远程服务器的自动(无密码)登录(例如,使用 OpenSSH)
  • 作为功能齐全的加密 VPN,请注意,只有 OpenSSH 客户端和服务器支持此功能。
  • 从远程主机传输 X(可以通过多个中间主机)
  • 通过支持 SOCKS 协议的 SSH 客户端,通过加密代理连接浏览 Internet。
  • 使用 SSHFS 安全地将远程服务器的目录挂载为本地计算机上的文件系统。
  • 通过上述一项或多项技术进行自动远程服务器监控和管理。
  • 用于 SSH 兼容的移动或嵌入式设备开发。
  • 保护文件传输机制。

文件传输方法

几种文件传输系统使用安全外壳协议,例如

  • SCP(安全复制)是基于 RCP 协议在 SSH 之上开发的。
  • rsync,其效率通常高于 SCP,通常通过 SSH 连接运行。
  • SFTP(SSH 文件传输协议)是一种安全的 FTP 替代方案(不要与 FTP over SSH 或 FTPS 混淆)
  • FISH,或文件通过 shell 协议传输,于 1998 年推出,是基于 SSH over Unix shell 命令开发的。
  • Aspera,也称为 Fast and Secure Protocol (FASP),使用 SSH 进行命令和数据传输,以及 UDP 端口。

架构

SSH 协议的分层架构由三个不同的组件组成

  • 传输层通常使用 TCP/IP 的传输控制协议 (TCP)(RFC 4253),端口号 22 保留为服务器监听端口。此层实现加密、压缩、完整性检查、初始密钥交换和服务器身份验证。尽管每个实现可能允许更多,但它向更高层公开了一个接口,用于传输和接收最大为 32,768 字节的明文数据包。通常,在传输 1 GB 数据后或一小时后(以先到者为准),传输层会安排密钥重新交换。
    SSH Full Form
  • 用户认证层(RFC 4252)负责客户端认证,该层还提供多种认证技术。客户端驱动的认证意味着 SSH 客户端,而不是服务器,可以向用户索要密码。服务器仅响应客户端的认证请求。通常使用以下用户认证技术
    1. **密码**,一种简单的密码认证技术,包括修改密码的功能。并非所有软件都使用此技术。
    2. **公钥**,一种基于公钥的认证技术,通常支持至少 DSA、ECDSA 或 RSA 密钥对。其他实现还接受 X.509 证书。
    3. **键盘交互** (RFC 4256) 是一种灵活的技术,服务器提供一个或多个信息录入提示,客户端显示它们,然后返回客户端输入的答案。某些 OpenSSH 设置使用此技术,当 PAM 是底层主机认证提供商时,可以有效地提供密码认证,这有时可能会阻止仅支持简单密码认证技术的客户端登录。
    4. **GSSAPI** 认证技术为 SSH 会话提供单点登录功能,提供了一个可扩展的系统,用于使用 Kerberos 5 或 NTLM 等外部机制处理 SSH 认证。虽然 OpenSSH 具有功能齐全的 GSSAPI 实现,但商业 SSH 实现通常会集成这些技术供公司使用。
    5. 连接层(RFC 4254)定义了定义 SSH 服务提供的通道的概念。我们可以从单个连接中多路复用多个 SSH 连接。两者都双向传输数据。通道请求传输特定于给定通道的带外数据,例如服务器端进程的退出代码或终端窗口的大小更改。此外,使用接收窗口大小,每个通道控制其流量。SSH 客户端发出全局请求以转发服务器端端口。常见的通道类型包括
      • Shell 用于 SFTP、exec 和终端 shell(包括 SCP 传输)
      • Direct-TCPIP 用于从客户端到服务器的转发连接。
      • 使用 forwarded-tcpip 进行从服务器到客户端的转发连接
      • SSHFP DNS 记录(RFC 4255)提供了公钥指纹,以确认主机的合法性。

由于其开放的设计,SSH 除了保护 shell 外,还可以用于广泛的任务,赋予其极大的通用性。

漏洞

SSH-1

由于该协议版本中的 CRC-32 数据完整性保护不足,1998 年发现了 SSH 1.5 的一个漏洞,允许将数据未经授权地插入到加密的 SSH 流中。在大多数实现中,添加了一个名为 SSH Compensation Attack Detector 的补丁。其中一些修改后的实现包含一个新的整数溢出漏洞,允许攻击者以 root 或 SSH 守护程序的权限运行任意代码。

2001 年 1 月发现了一个允许攻击者更改 IDEA 加密会话最后一个块的漏洞。同月还发现了一个允许恶意服务器将客户端登录传递给另一个服务器的漏洞。

由于其固有的漏洞,SSH-1 通常被认为已过时,应避免使用,应明确禁用 SSH-1 回退。大多数现代服务器和客户端都支持 SSH-2。

CBC 的明文恢复

2008 年 11 月发现了一个理论上的漏洞,该漏洞允许从使用当时标准加密方法 CBC 加密的密文块中恢复多达 32 位明文。最简单的修复方法是将 CBC 模式切换为 CTR 模式,这使得 SSH 对该攻击免疫。

SSH Full Form

NSA 涉嫌解密

爱德华·斯诺登于 2014 年 12 月 28 日向《明镜周刊》发布的敏感文件暗示,美国国家安全局将能够潜在地解码某些 SSH 通信。


下一个主题全称