如何解决 SSH 卡在“建立与服务器的连接”上的问题

已发表: 2025-12-21

Secure Shell (SSH) 是远程管理和管理服务器的关键组件。在 SSH 客户端中卡在“建立与服务器的连接”消息可能会令人沮丧,尤其是在处理生产环境或时间敏感的配置时。此问题可能看起来很模糊,但有多种潜在原因 — 从网络配置错误到目标服务器上的 SSH 守护程序问题。了解如何有效地排除 SSH 连接故障将为您节省时间和不必要的压力。

长话短说

如果您的 SSH 会话卡在“建立与服务器的连接”上,请首先验证目标主机的可用性和网络连接。确认 SSH 服务正在目标上运行并侦听正确的端口。然后检查您的本地防火墙、DNS 解析或 VPN 设置。使用详细的 SSH 日志记录 (-vvv) 在连接尝试期间获得更多信息。

1. 确认基本网络连接

在深入研究配置和日志文件之前,请从最简单的检查开始:

  • Ping 服务器:使用ping来验证主机是否可达。
  • Traceroute 或 MTR:这可以帮助确定您和 SSH 服务器之间的某个网络跃点是否存在连接阻塞。
  • Telnet 或 Netcat:尝试访问端口 22(或自定义 SSH 端口)以确认其可访问: telnet your.server.ip 22nc -zv your.server.ip 22

如果服务器没有响应 ping 或拒绝 SSH 端口,则可能是主机已关闭、网络阻塞流量,或者 SSH 未在服务器上正常运行。

2. 使用详细模式获得洞察

SSH 提供不同级别的详细信息,可以帮助查明连接过程中发生延迟的位置。使用-v-vv-vvv选项获取更详细的输出:

 ssh -vvv [email protected]

详细模式可以提供帮助的常见位置包括:

  • 检查 DNS 解析
  • 确定连接尝试是否在特定步骤超时
  • 识别密钥交换或身份验证错误

3. 防火墙和安全组设置

很多时候,防火墙或云安全设置是罪魁祸首。您应该检查客户端和服务器端:

  • 客户端防火墙:确保允许端口 22(或您的自定义 SSH 端口)上的传出连接。
  • 服务器端防火墙:iptablesufw等工具可能会丢弃入站 SSH 流量。
  • 云安全组:在 AWS、GCP 或 Azure 环境中,检查安全组是否允许您的 IP 和正确的端口。

如果您的连接在“建立连接”处挂起,则可能表明数据包正在被静默丢弃,而不是主动拒绝。

4.检查服务器上的SSH守护进程

如果您可以通过其他方式访问服务器(例如,通过控制台、串行访问或其他远程会话),请直接登录并验证 SSH 服务:

 sudo systemctl status sshd
 sudo netstat -tulpn | grep ssh

注意事项:

  • 该服务是否处于活动状态并正在运行?
  • 它是否正在侦听预期的 IP 和端口?
  • 最近对 SSH 配置文件(通常是/etc/ssh/sshd_config)的更改是否可能导致失败?

如果 SSH 最近重新配置或重新启动不当,该进程可能会崩溃或对传入连接无响应。

5. DNS解析问题

如果您使用主机名而不是 IP 地址进行连接,请确保 DNS 正确解析:

 nslookup your.server.domain
 dig your.server.domain

如果无法解析主机名,DNS 设置问题可能会延迟或中断您的 SSH 连接。另外,请验证路由器或 VPN 中的/etc/resolv.conf或 DNS 设置。

6. TCP 包装器和基于主机的限制

在某些 Linux 发行版上,TCP 包装器(通过/etc/hosts.allow/etc/hosts.deny控制)可以限制 SSH 访问:

  • 确保/etc/hosts.deny不包含类似sshd: ALL
  • 使用 sshd 在/etc/hosts.allow中明确允许您的 IP sshd: your.ip.address

尽管 TCP 包装器在很大程度上已被弃用,但遗留系统可能仍在使用它们,而日志中没有明确的指示。

7. VPN 或代理干扰

VPN 和某些代理设置可能会干扰 SSH 流量:

  • 检查您的 VPN 是否处于活动状态并正确路由您的流量。
  • 如果使用 VPN 分割隧道,请验证隧道中是否包含到 SSH 服务器的流量。
  • 尝试暂时禁用 VPN 并通过直接互联网访问重新连接。

同样,企业代理或限制性网关可能会丢弃或操纵 SSH 数据包,从而导致会话挂起。

8. SSH 密钥问题和身份验证延迟

虽然身份验证错误通常会返回明确的“权限被拒绝”消息,但有时密钥处理或授权密钥查找的长时间延迟可能会导致连接卡住。

  • ~/.ssh目录中的密钥过多会减慢身份验证速度。在~/.ssh/config中使用IdentitiesOnly yes来减少尝试。
  • 配置指定密钥: ssh -i ~/.ssh/my_key user@host

9. 服务器负载和资源限制

负载过重的服务器可能会减慢甚至阻止新的 SSH 连接:

  • 检查服务器上的 CPU、RAM 或进程限制是否较高
  • 如果无法通过 SSH 访问,请使用云控制台检查系统状态

内存不足的情况可能会导致sshd行为不稳定或只是使新连接尝试超时。

10. 被Fail2Ban或类似工具暂时禁止

Fail2Ban 或 DenyHosts 等安全工具可能会阻止重复验证失败的 IP。这可能会导致静默连接挂起:

  • 检查/var/log/fail2ban.log或相关日志中的 IP 禁令
  • 尽可能将您的 IP 列入白名单或从不同网络访问服务器

结论

SSH 连接问题(尤其是当卡在“建立与服务器的连接”时)可能源于多种因素,从本地防火墙设置到远程服务器性能问题。从基本的连接测试开始,逐步进行深入的日志记录和配置检查的严格的故障排除方法至关重要。使用详细 SSH 输出等工具、检查系统日志、验证 DNS 并确保服务器响应良好,将帮助您有效地隔离根本原因。

请记住:始终增量测试更改并备份您修改的任何配置。在高可用性环境中,当 SSH 无法响应时,采用带外管理方法(例如 IPMI、串行控制台或主服务器访问)至关重要。