什么是 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。

报告
DDoS 威胁现状:
2023 年第三季度

白皮书
制定网络现代化战略

SSH 有什么作用?

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

隧道能力:在网络中,隧道技术是指使用平常无法使用的协议或路径,在网络上传输数据包的一种方法。隧道技术的工作原理是使用附加信息(称为标头)包装数据包*,更改其目的地。SSH 隧道使用一种称为端口转发的方法,将数据包从一台计算机发送到另一台计算机。下文将详细介绍 SSH 端口转发。

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

注册
任何 Cloudflare 计划均可提供安全性和速度

SSH 如何工作?

TCP/IP

SSH 在 TCP/IP 协议套件的基础上运行,互联网的大部分功能都离不开 TCP/IP 协议套件。TCP/IP 传输和传递数据包。使用 TCP 是 SSH 与其他隧道技术协议的不同之处,其中一些协议使用速度更快但可靠性较差的 UDP。

公钥加密

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 访问权限落入攻击者,甚至是善意的内部人员,手中,可能会造成危害。在许多记录在册的攻击中,SSH 已被用于窃取私人数据、打开通往安全网络的后门路由,以及获得服务器的 root 访问权限。

SSH 还可以顺利通过未阻止 22 端口的防火墙(很多防火墙都是如此),让攻击者能够潜入安全网络。

攻击者还可能会窃取 SSH 密钥来访问私有计算机和服务器。事实上,SSH 密钥管理是大型组织面临的一个主要安全问题,因为这些组织的许多服务器可能使用数千个甚至数百万个密钥,而手动跟踪和更新这些密钥几乎是不可能完成的任务。除非被明确撤销,否则 SSH 密钥不会过期。因此,攻击者一旦获得密钥,便可以在数月或数年内持续访问。

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

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

另一个区别是 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 如何提高 SSH 的安全性?

虽然 SSH 存在安全风险,但许多组织需要它来保持高效。为了缓解这些风险,Cloudflare 在其 SASE 平台中推出 SSH with Access for Infrastructure。此服务将 Zero Trust 概念应用于SSH,让组织能够精细化控制用户连接到其 SSH 服务器的方式。这会限制用户可以执行的操作,减轻攻击者或内部人员未经授权使用 SSH 造成的影响。

SSH with Access for Infrastructure 还会消除管理 SSH 密钥的需求(如上所述,这是一项巨大的挑战)。让组织可以使用由 Cloudflare 管理的证书颁发机构 (CA) 颁发的短期 SSH 证书。

Cloudflare 让组织还可以监测并记录 SSH 访问和使用情况,这是事件恢复和监管合规必备的条件

进一步了解 SSH with Access for Infrastructure