什么是 SSH?| Secure Shell (SSH) 协议

Secure Shell (SSH) 协议在计算机之间建立远程加密连接。它还能实现隧道传输。

学习目标

阅读本文后,您将能够:

  • 定义 Secure Shell (SSH) 协议
  • 说明 SSH 的工作原理和安全保障
  • 了解 SSH 隧道
  • 解释 SSH 的安全风险

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

什么是 Secure Shell (SSH) 协议?

Secure Shell (SSH) 协议是一种通过不安全网络向计算机安全发送命令的方法。SSH 使用加密技术对设备之间的连接进行验证和加密。SSH 还可以实现隧道传输或端口转发,这是指数据包可以穿越原本无法穿越的网络。 SSH 通常用于远程控制服务器、管理基础设施和传输文件。

外出旅行时,商店的店主可能会在远处给员工下达指示,以确保他们不在时商店能顺利运转。同样,SSH 允许管理员从远处管理服务器和设备。较早的远程管理协议(如 Telnet)以任何人都能看到的形式传输管理员的命令。(试想一下,如果员工在通话时开免提,店里的所有顾客都能听到店主的私密指示)。与 Telnet 不同,SSH 是安全的,因此称之为 Secure Shell。

SSH 有什么作用?

远程加密连接:SSH 在用户的设备和远处的机器(通常是服务器)之间建立连接。它使用加密技术对通过连接的数据进行加密。截获方只能找到类似静态数据的内容——除非进行解密,否则它毫无意义的随机数据。(SSH 使用的加密方法使外人难以解密)。

隧道能力:在网络中,隧道传输是一种使用平常无法使用的协议或路径在网络中移动数据包的方法。隧道传输的工作原理是用附加信息(称为报头)包裹数据包*,从而改变其目的地。SSH 隧道使用一种称为端口转发的技术,将数据包从一台机器发送到另一台机器。下文将详细说明端口转发。

*所有通过网络的数据都被分解成较小的数据块,这些数据块称为“数据包”。

SSH 如何工作?

TCP/IP

SSH 在 TCP/IP 协议套件的基础上运行,而互联网的大部分功能都依赖于 TCP/IP 协议套件。TCP 代表 Transmission Control Protocol(传输控制协议),IP 代表 Internet Protocol(Internet 协议)。TCP/IP 将这两个协议配合使用,以便格式化、路由和传送数据包。除其他信息外,IP 表示数据包应发送到哪个 IP 地址(看成邮寄地址),而 TCP 则表示数据包应发送到每个 IP 地址的哪个端口(看成大楼的楼层或公寓号码)。

TCP 是一种传输层协议:它与数据包的传输和交付有关。通常,在 TCP/IP 的基础上还会使用其他协议,以便将传输的数据转换成应用程序可以使用的形式。SSH 就是这样一种协议。(其他例子包括 HTTP、FTP 和 SMTP)。

公钥加密

SSH 是“安全的”,因为它通过一种名为公钥加密法的程序将加密和身份验证结合在一起。公钥加密法是一种用两个不同密钥对数据进行加密或签名的方法。其中一个密钥是公钥,任何人都可以使用。另一个密钥是私钥,由其所有者保密。由于两个密钥相互对应,要确定密钥所有者的身份,就必须拥有与公钥配套的私钥。

这些“非对称”密钥(因其值不同而得名)还能让连接双方协商相同的共享对称密钥,以便在通道上进一步加密。协商完成后,双方使用对称密钥对交换的数据进行加密。

在 SSH 连接中,双方都有一个公钥/私钥对,每一方都使用这些密钥对另一方进行身份验证。这也是 SSH 与 HTTPS 的不同之处,后者在大多数实施中只验证 Web 服务器在客户端-服务器连接中的身份。(其他区别包括:HTTPS 通常不允许客户端访问服务器的命令行,防火墙有时会阻止 SSH,但几乎不会阻止 HTTPS。)

身份验证

虽然公钥加密技术可以验证 SSH 中连接设备的身份,但正确安全的计算机仍需要使用 SSH 的人员进行身份验证。通常的形式是输入用户名和密码。

身份验证完成后,用户就可以在远程计算机上执行命令,就像在自己的本地计算机上一样。

SSH 隧道技术或“端口转发”

端口转发就像在两个人之间转发信息。Bob 可能会向 Alice 发送信息,而 Alice 又会将信息转发给 Dave。同样,端口转发会将指向一台机器上某个 IP 地址和端口的数据包发送到另一台机器上的某个 IP 地址和端口。

例如,假设一名管理员要对其管理的专用网络内的服务器进行更改,而且要从远程位置进行更改。不过,出于安全考虑,该服务器只能接收来自专用网络内其他计算机的数据包。管理员可以改为连接到网络中的另一个服务器(一个可以接收互联网流量的服务器),然后使用 SSH 端口转发连接到第一个服务器。从第一台服务器的角度来看,管理员的数据包来自专用网络内部。

使用 SSH

Linux 和 Mac 操作系统内置 SSH。Windows 机器可能需要安装应用 SSH 客户端。在 Mac 和 Linux 计算机上,用户可以打开终端应用程序,直接输入 SSH 命令。

SSH 有什么用途?

从技术上讲,SSH 可以在网络上传输任何任意数据,而且可以将 SSH 隧道设置为用于多种用途。不过,最常见的 SSH 使用案例如下:

  • 远程管理服务器、基础设施和员工计算机
  • 安全传输文件(SSH 比 FTP 等未加密协议更安全)
  • 访问中的服务时,不会将本地机器的端口暴露在互联网上
  • 远程连接到专用网络中的服务
  • 绕过防火墙限制

SSH 使用什么端口?

端口 22 是 SSH 的默认端口。有时,防火墙可能会阻止对防火墙后面服务器上某些端口的访问,但会开放 22 端口。因此,SSH 对于访问防火墙另一端的服务器非常有用:指向 22 端口的数据包不会被阻止,然后可以转发到任何其他端口。

SSH 是否存在安全风险?

任何协议都可能被恶意方滥用,而 SSH 的加密特性和隧道功能使其对攻击者特别有吸引力。SSH 已被用于许多记录在案的攻击,以提取私人数据、打开进入安全网络的后门路径,甚至获取服务器的 root 访问权限。

某些类型的攻击还可能会窃取 SSH 密钥以访问私人计算机和服务器。事实上,SSH 密钥管理是大型组织面临的一个主要安全问题,因为它们的许多服务器可能使用数千甚至数百万个密钥,而跟踪和更新这些密钥几乎是不可能的。攻击者一旦获得密钥,就可能在数月或数年内持续访问。

SSH 与其他隧道协议相比有何不同?

SSH 与其他隧道协议的主要区别之一是它们运行所在的 OSI 层GRE、IP-in-IP 和 IPsec 都是网络层协议。因此,它们不知道端口(传输层概念),而是在 IP 地址之间运行。(SSH 的确切 OSI 层没有严格定义,但大多数资料都将其描述为第 7 层/应用程序层协议)。

另一个区别是 SSH 使用 TCP。如上所述,TCP 是一种传输层协议,也是互联网上使用的主要协议之一。另一个广泛使用的传输层协议是 User Datagram Protocol (UDP)。UDP 是一种“尽力而为”传输协议(发送数据包而不确保其送达),这使其速度更快,但有时会导致数据包丢失。虽然 TCP 的速度比 UDP 慢,但它能保证按顺序传送所有数据包,因此更加可靠。

IPsec 只使用 UDP 而不是 TCP,使得 IPsec 数据包能够通过防火墙。因此,IPsec 隧道通常比 SSH 隧道更快,但可能会在传输过程中丢失数据包。GRE 和 IP-in-IP 可与 TCP 或 UDP 搭配使用。

最后,SSH 一次只对一个应用程序加密,而不是对进出设备的所有流量加密。这也是 SSH 与 IPsec 的不同之处,后者对所有网络流量进行加密,无论流量来自哪个应用程序。因此,SSH 不用于建立 VPN

Cloudflare Zero Trust 如何使 SSH 更安全?

虽然 SSH 被广泛使用,但将服务器的端口暴露在互联网上始终是有风险的。Cloudflare Zero Trust 允许企业通过互联网提供 SSH 服务器,而无需承担打开这些入站端口的风险。服务器可以安全地连接到 Cloudflare 网络。然后,管理员和其他用户可在设备上安装 Cloudflare WARP 客户端,通过 Cloudflare 访问服务器;在此处了解更多信息。