linux系统连接中断:“connection closed by foreign host”问题排查与解决
问题描述:
使用xshell连接测试服务器时,出现“Connection closed by foreign host”错误提示,导致连接中断。此问题通常发生在之前连接成功,但再次连接时却报错的情况。这并非总是防火墙问题(尽管防火墙也可能导致此问题,建议检查),而是可能与服务器端TCP连接状态有关。
问题原因:
当客户端连接意外中断时,服务器端的TCP连接会处于半打开状态。如果客户端再次尝试连接同一服务器,服务器会检测到这个半打开的连接,并发送RST报文终止连接,从而导致客户端显示“Connection closed by foreign host”错误。
本文遇到的具体情况是:客户端修改了SSH远程端口,但未重启SSH服务。旧端口仍可通信,但无法建立新的SSH连接,而使用新端口则可以正常连接。
由于客户端忘记了端口修改,通过VNC连接服务器后,查看/etc/ssh/sshd_config文件可以确认当前SSH服务的端口号。
解决方案:
第一种情况(防火墙问题):检查服务器防火墙设置,确保允许SSH连接。本文遇到的并非此问题,故略过此方案。
第二种情况(TCP连接问题):检查服务器地址,尝试以下两种方法:
- 终止占用端口的进程:在服务器上使用命令找出并终止占用指定端口的进程(例如:lsof -i :22 查找22端口的进程,然后使用kill命令终止进程)。
- 重启服务器:如果服务器资源允许,重启服务器可以清除所有TCP连接状态,解决此问题。(本文中,由于测试服务器资源较少,选择了重启服务器)。
通过以上步骤,即可有效解决“Connection closed by foreign host”问题,恢复正常的SSH连接。