有一个奇怪的错误,以前通过 ssh 连接到服务器的客户端在断开连接并稍后尝试重新连接时,会收到“端口 22 连接被拒绝”错误消息。我必须重新启动客户端计算机才能重新连接。任何先前未连接到 ssh 服务器的客户端仍然可以随时连接。
关于为什么会发生这种情况有什么想法吗? service sshd status
没有显示任何问题,甚至auth.log
没有记录这些尝试。防火墙也被禁用。
Windows 10 的典型连接:
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug3: Failed to open file:C:/Users/baric/.ssh/config error:2
debug3: Failed to open file:C:/ProgramData/ssh/ssh_config error:2
debug2: resolve_canonicalize: hostname 192.168.1.101 is address
debug2: ssh_connect_direct
debug1: Connecting to 192.168.1.101 [192.168.1.101] port 22.
debug3: finish_connect - ERROR: async io completed with error: 10061, io:000002E37B8A09C0
debug1: connect to address 192.168.1.101 port 22: Connection refused
ssh: connect to host 192.168.1.101 port 22: Connection refused
答案1
对此行为的一种可能解释是 SSH 服务器配置为限制来自同一 IP 地址的并发连接数。当客户端第一次连接到服务器时,会建立一个新连接并在服务器的连接表中注册。然而,当客户端断开连接时,服务器端的连接可能不会立即终止,而是可能会保持timed-wait
较短的一段时间。在此期间,服务器可能仍认为客户端已连接,并且不允许来自同一 IP 地址的新连接。
如果客户端在此期间尝试连接,它将收到一条Connection refused
错误消息,因为服务器仍在等待先前的连接完全终止。
要检查是否是这种情况,您可以尝试增加 SSH 服务器允许的最大并发连接数,看看问题是否仍然存在。您还可以尝试调整连接超时值,看看是否有帮助。
# find these two lines in /etc/ssh/sshd_config and try to reduce their values to see if it helps
ClientAliveInterval
ClientAliveCountMax
sudo systemctl reload ssh # (might be ssh on your server