为什么我的 SSH 连接速度很慢?解决延迟问题的五个即时修复方法

诊断并消除您的安全外壳 (SSH) 连接中令人沮丧的延迟。本指南详细介绍了五个即时配置修复方法——包括禁用 DNS 查找和 GSSAPI 身份验证——以恢复快速的终端响应时间。了解优化密码和利用连接多路复用以提高远程生产力的实用步骤。

57 浏览量

为什么我的 SSH 连接速度很慢?五种即时修复延迟问题的方法

您是否厌倦了每次输入命令后都要看着终端犹豫不决,忍受着那些扼杀您生产力的令人沮丧的延迟?缓慢的安全外壳 (SSH) 连接是系统管理员和开发人员共同面临的一个常见痛点。这种延迟通常是由于客户端或服务器端的配置疏忽造成的,而不是真正的网络饱和。

本指南将揭开 SSH 延迟的常见罪魁祸首——从缓慢的 DNS 查询到低效的加密算法——并提供五种即时、可操作的修复方法,您可以立即实施,以恢复快速、高效的远程访问。


诊断根本原因:延迟发生在何处?

在应用修复之前,了解何时发生减速会很有帮助。SSH 连接延迟通常在以下两个地方之一显现:

  1. 连接建立阶段: 在您甚至看到密码提示或收到成功的登录横幅之前出现长时间延迟。这通常指向 DNS 问题或复杂的密钥交换设置。
  2. 交互式命令执行: 输入响应缓慢或在输入命令和看到输出之间出现明显延迟。这可能指向压缩问题或一般的网络抖动。

理解这种区别有助于精确定位需要针对的配置设置。

五种即时修复以获得快速的 SSH 性能

以下五种修复方法解决了 SSH 延迟的最常见原因。它们通常可以安全地实施,并且经常能立即产生效果。

修复 1:在连接时禁用 DNS 查询(客户端)

连接延迟最常见的原因之一是 SSH 客户端在连接初始化期间尝试对服务器的 IP 地址执行反向 DNS 查询。如果 DNS 服务器缓慢或无法访问,此过程可能会挂起数秒钟。

操作: 在您的本地 SSH 客户端配置文件(~/.ssh/config)中添加以下行:

Host *
    UseDNS no

设置 UseDNS no 告诉您的客户端在登录期间不要等待服务器的主机名解析,从而显著加快连接设置时间,尤其是在连接到内部 IP 或未配置反向 DNS 的计算机时。

修复 2:禁用 GSSAPI 身份验证(客户端)

通用安全服务应用程序接口 (GSSAPI) 通常在企业环境中用于 Kerberos 身份验证集成。虽然在这些环境中很有用,但如果您的环境不使用它,客户端会尝试初始化 GSSAPI,如果必要的服务不存在或配置不正确,则会导致超时。

操作: 在您的 ~/.ssh/config 文件中添加以下指令:

Host *
    GSSAPIAuthentication no

这会立即跳过 GSSAPI 检查,防止在初始连接握手中可能出现的挂起。

修复 3:选择更快的密码套件(服务器或客户端)

旧的或效率较低的加密算法可能会减慢初始密钥交换和后续数据加密/解密的 auctex。现代 SSH 实现默认使用强大、快速的算法,但有时旧的客户端或遗留服务器会强制进行较慢的协商。

操作(客户端): 如果您怀疑服务器提供了缓慢的选项,您可以通过在 ~/.ssh/config 中指定首选密码来强制客户端使用更快的选项:

Host myserver.example.com
    Ciphers [email protected],[email protected],[email protected]

提示: [email protected] 通常是最快的现代对称密码之一。

修复 4:启用客户端压缩(适用于高延迟连接)

如果您通过真正缓慢或高延迟的连接(例如,非常远的卫星连接)进行连接,则在传输之前压缩数据流可以减少总体带宽使用量,尽管它会增加少量的 CPU 时间开销用于压缩/解压缩。

操作: 在您的客户端配置(~/.ssh/config)中添加以下内容:

Host * 
    Compression yes

警告: 对于高带宽、低延迟的本地网络,推荐使用压缩,因为 CPU 开销通常会超过最小的收益。

修复 5:在初始设置期间禁用严格的主机密钥检查(临时诊断)

当您首次连接到新服务器时,SSH 会提示您验证主机密钥指纹并将其添加到 known_hosts。如果此步骤配置有误或提示被其他网络问题延迟,则可能导致延迟。

虽然出于安全原因,您始终应保持 StrictHostKeyChecking 启用状态,但如果您正在调试初始连接问题,暂时将其设置为 ask(或观察默认行为)可以隔离延迟是否与主机密钥提示本身有关。

最佳实践建议: 确保您的 ~/.ssh/config 是安全的。除非您处于完全受控的临时自动化环境中,否则切勿将 StrictHostKeyChecking 设置为 no。典型的安全设置使用:

Host *
    StrictHostKeyChecking ask

高级技巧:连接复用

对于经常在同一远程主机上切换不同终端会话的用户来说,连接复用可以在建立初始连接后提供巨大的速度提升。

SSH 复用允许多个会话(ControlMaster 实例)共享一个底层网络连接。后续连接会重用现有的安全通道,完全绕过密钥交换和身份验证。

操作: 在您的客户端配置(~/.ssh/config)中添加以下行:

Host * 
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h:%p
    ControlPersist 600
  • ControlMaster auto:启用复用。
  • ControlPath:定义控制套接字文件的存储位置。
  • ControlPersist 600:在最后一个会话关闭后保持连接存活 600 秒。

确保 ControlPath 中指定的目录(例如 ~/.ssh/sockets)存在且可写。

性能提升总结

SSH 延迟通常源于不必要的后台操作。通过显式禁用缓慢的查询(UseDNS noGSSAPIAuthentication no)并优化密码选择,您可以消除连接握手的瓶颈。对于持久连接,复用可以提供近乎即时的会话切换。应用这五种修复方法,您应该会注意到远程工作流程效率的显著提高。