远程访问:SSH 与 Telnet 的深度比较
在当今远程连接盛行的时代,用户和系统管理员都需要依赖各种工具,以确保远程操作的安全、稳定和高效。 在众多远程连接方法中,SSH 和 Telnet 无疑是最受关注的两个。 究竟哪一个更适合远程访问? 本文将深入探讨 SSH 和 Telnet,并通过比较分析,找出最适合你的选择。
什么是远程访问?
远程访问允许用户或管理员通过互联网从任何地点访问网络中的计算机或设备。 通过远程访问,用户可以执行诸如文件传输、协作办公以及保护应用程序流量等多种操作。 对于组织而言,远程访问至关重要,它不仅能保障组织的日常运作,还能促进其进一步发展。 此外,管理员也需要远程访问来管理服务器、网络和应用程序,无需实际到达服务器所在地。
什么是 SSH?
安全外壳(Secure Shell,简称 SSH)是一种网络协议,它允许不安全网络中的计算机之间进行安全通信。 一旦建立了安全的连接,用户或管理员就能远程登录到目标机器,执行应用程序,或者通过加密连接在网络中传输文件。 SSH 不仅仅是一个协议,它还指代实现 SSH 协议的一系列技术和实用工具。为了确保 SSH 的安全性,采用了多种技术,包括公钥验证、加密数据通信和强密码验证等。
SSH 的最初设计者是芬兰计算机科学家 Tatu Ylonen。他在自己新建立的网络中发现了一个秘密的密码嗅探器后,着手开发了 SSH。 Netscape Communications Corporation 则是 SSH 技术背后的公司。
SSH 的工作原理是什么?
SSH 取代了诸如 Telnet、rlogin、rsh 等较旧的远程连接协议,那些协议虽然曾经很流行,但安全性不足。 SSH 如此优秀,以至于用户更倾向于使用它,而不是依赖远程复制(rcp)和文件传输协议(FTP)等进行文件传输。
SSH 采用客户端-服务器模型,其中 SSH 客户端连接到 SSH 服务器。
- SSH 客户端是驻留在发起 SSH 协议的计算机或设备上的程序。客户端向 SSH 服务器发送请求,并等待服务器接受。为了验证并确保连接到正确的服务器,SSH 客户端使用了公钥加密。这种机制能够防止恶意行为者伪装成服务器,并从客户端窃取敏感信息。
- SSH 服务器负责处理 SSH 连接并运行服务。为了接收传入的请求,SSH 服务器会持续监听 TCP 端口 22(默认情况下)。一旦接收到请求,它就会做出响应。SSH 服务器同样使用公钥验证来检查和验证客户端。只有在验证成功后,客户端才能访问主机系统。
客户端和服务器协商加密方式,他们可以共同禁用较弱的加密算法。此外,SSH 还支持多路连接,允许通过单个 SSH 连接打开多个通道,从而执行多个任务(如下载、编辑或运行程序)。
SSH 的基本语法如下:
$ ssh [email protected]
其中,`user_name` 是你连接到主机的用户名,`主机`可以是 IP 地址或域名。
简化的 SSH 流程如下:
- SSH 客户端发起与特定 SSH 服务器的连接。
- SSH 服务器接收连接,并将其公钥发送给客户端。
- 客户端将服务器的公钥保存在其主机文件中(以备将来连接使用)。
- 服务器和客户端协商并建立连接参数。
SSH 具有强大的连接选项,出色的安全性和数据完整性保护。 它还遵循 IETF 标准化,以便更好地实施,并且在过去的15年里一直保持完好无损。 如果你想深入了解 SSH 的技术细节,请参阅 SSH RFC 4253 标准化文档。另外,还可以查看 techblik.com 对 SSH 的相关解读。
什么是 Telnet?
Telnet 代表电传打字机网络。它是一种流行的网络协议,通过命令行界面提供远程连接。 与 SSH 相似,您可以使用它来获取远程控制并执行操作,但它缺乏 SSH 提供的安全性。 缺乏安全性是因为它在 1969 年诞生时,大部分通信都在本地网络中进行,与不安全的互联网相比,当时的环境是相对安全的。
Telnet 的工作原理是什么?
Telnet 通过在客户端和服务器之间创建基于文本的终端到终端通信来工作。 它使用采用 8 字节连接的客户端-服务器模型。 一旦建立连接,您就可以在远程计算机上执行各种操作,包括检查打开的端口、配置设备、编辑文件甚至运行程序。
Telnet 的基本语法如下:
$ telnet hostname port
要了解有关 Telnet 的更多信息,请查看有关使用 Telnet 命令进行连接测试和故障排除的资料。
应该在何时何地使用 SSH?
SSH 主要用于以下方面:
- 远程系统管理
- 远程命令执行
- 保护应用程序的流量
- 文件传输
管理员还可以设置自动 SSH 会话来处理重复性任务,例如网络备份创建、日志文件收集、定期维护等。 SSH 是远程连接操作的必备工具,尤其是在不安全的网络(如互联网)上。即使在本地网络中使用 SSH 也是一个不错的选择,因为你可能无法确定你的本地网络是否完全安全。
应该在何时何地使用 Telnet?
由于 Telnet 不安全,你应该避免在不安全的网络上使用它进行远程连接。然而,这并不意味着 Telnet 没有用武之地。
你可以使用 Telnet 执行以下操作:
- SSH 故障排除
- 对 FTP、SMTP 和 Web 服务器进行故障排除
- 检查端口是否打开
- 访问受信任的互联网网络
SSH 与 Telnet
接下来,我们将从不同维度对 SSH 和 Telnet 进行比较。 如果你时间有限,可以直接查看下方的比较表格。
SSH | Telnet | |
安全性 | 高度安全,客户端和服务器可以协商加密算法。 | 不安全,没有机制来保护连接或数据包。 |
身份验证 | 使用公钥加密进行身份验证。 | 没有身份验证机制,仅询问用户名/密码,并在没有任何保护的情况下传输。 |
操作 | 默认使用 TCP 端口 22, 可以修改端口以防止未经授权的访问。 | 默认使用端口 23 监听传入的连接,可以通过配置防止未经授权的访问。 |
模型 | 客户端-服务器模型。 | 客户端-服务器模型。 |
数据传输速度 | 技术上比 Telnet 慢,但在实际使用中几乎察觉不到。 | 由于没有安全协议,比 SSH 快。 |
表:SSH 与 Telnet
安全性
SSH 非常安全。它使用适当的加密协议来确保你的连接安全,而 Telnet 则完全没有任何安全措施。在 SSH 中,客户端和服务器可以协商连接参数,包括端到端的加密算法,确保弱加密算法被禁用,从而最大程度地提高 SSH 连接的安全性。一旦在客户端和服务器之间建立了 TCP/UDP 连接,就会开始尝试创建安全连接。
为了更好地理解 SSH 安全性的工作原理,我们来了解一下 SSH 数据包的构成。SSH 数据包由五个部分组成:
- 数据包长度:4 个字节,表示数据包的大小。
- 填充长度:1 个字节,表示数据包有多少填充。
- 有效载荷:正在传输的实际数据,大小不定。
- 填充:实际填充,与之前的长度不同,是与有效载荷结合的随机字节,使其更加加密。
- 消息验证码:用于验证数据包真实性的标签,确保数据没有被更改。
在 SSH 加密过程中,只有数据包长度和消息验证码可以被读取。 客户端和服务器通过消息验证码协商连接参数。 此外,SSH 数据包还可以使用不同的压缩算法进行压缩。
Telnet 缺乏安全性。 它执行不安全的身份验证来连接客户端和服务器。 因此,任何恶意行为者都可以读取 Telnet 数据包并破坏连接。
身份验证
SSH 是一种安全协议,它依靠公钥加密来验证客户端和服务器。 具体来说,SSH 可以使用非对称或对称加密算法来配对公钥和私钥。另一方面,Telnet 没有身份验证保护。它的身份验证过程在连接之前要求提供帐户名和密码。用户名和密码在没有任何安全措施的情况下传输,因此容易被窃取。
操作
在操作方面,SSH 默认运行在 TCP 端口 22 上,而 Telnet 使用 TCP 端口 23。因此,使用 SSH 或 Telnet 协议时如果不指定端口号,命令将尝试自动连接到端口 22 和 23。然而,这些端口是众所周知的,可能被黑客利用进行未经授权的访问。 你可以通过更改 SSH 和 Telnet 协议使用的端口来解决这个问题。 最好关闭常用端口,并选择 1024 到 65535 之间的端口。
在 Telnet 中,命令以网络虚拟终端 (NVT) 格式发送。 Telnet 服务器能够接收和理解这种格式,但这里没有加密或身份验证机制。对于 SSH,一旦建立了客户端-服务器连接,就会生成一个会话并使用会话密钥进行标识。此密钥对流量进行加密,直到会话结束。此外,服务器需要验证客户端,这通常通过生成 SSH 密钥对来完成。完成验证后,将创建端到端加密通道,以进行安全的数据传输。
模型
SSH 和 Telnet 都使用客户端-服务器模型,这带来了多种好处,包括:
- 它可以水平扩展,服务器可以根据需要添加更多资源。
- 可以针对正确的数据输入优化客户端。
- 在客户端和服务器之间分配应用程序处理。
速度和开销
要真正理解 SSH 和 Telnet,我们必须了解它们的开销影响。通常,SSH 比 Telnet 有更多的开销,但在实际应用中几乎察觉不到差异。技术上来说,Telnet 和 SSH 都会在连接 1 小时或传输 1 GB 数据后重新生成密钥。就带宽而言,SSH 的开销更大,但对用户的影响微乎其微。至于客户端和服务器的 CPU 占用,由于 AES 标准在 SSH 连接中的应用,开销是最小的。简而言之,SSH 和 Telnet 在视觉上没有速度或开销上的显著差异。但从技术角度比较,SSH 的开销确实略高于 Telnet。
SSH 和 Telnet 用例
以下列出了一些 SSH 和 Telnet 的典型应用场景。
SSH 用例:
- 远程执行命令
- 安全访问远程机器资源
- 远程传输文件
- 远程交付软件更新
- 设置自动文件传输或进行手动传输
Telnet 用例:
- SSH 故障排除
- 对 FTP、SMTP 和 Web 服务器进行故障排除
- 检查端口是否打开
- 访问受信任的互联网网络
最后的思考:哪个更好?
毫无疑问,SSH 更胜一筹。它是一种现代化的网络协议,能够确保远程访问的安全性。到目前为止,还没有发现任何严重的 SSH 安全漏洞。此外,它还非常易于使用和设置。 另一方面,Telnet 已逐渐被淘汰。它已经有近 50 年的历史了。不过,在某些情况下,Telnet 仍然有用,例如它可以用于排除 SSH 故障或检查端口是否开放。管理员可以使用 Telnet 来解决许多网络问题。