CentOS SSH连接超时的定位与解决
一、先判断是连接不上还是会话被断开
nc -vz <服务器IP> 22 或 telnet <IP> 22tcpdump -ni any port 22(服务器端)ss -lntp | grep :22 或 netstat -lntp | grep :22ssh -vvv user@host二、连接不上的排查与修复(Connection timed out)
yum install -y openssh-server;systemctl start sshd;systemctl enable sshdss -lntp | grep :22,若为空说明未监听或被改了端口。ip addr、route -n;必要时检查云安全组/物理防火墙。firewall-cmd --list-ports;firewall-cmd --zone=public --add-port=22/tcp --permanent;firewall-cmd --reloadiptables -L -n | grep :22,必要时放行并重载规则。/etc/ssh/sshd_config 中的 Port 22 与 ListenAddress(若仅监听 127.0.0.1 或错误地址,外部将连接超时)。setenforce 0 测试是否被 SELinux 拦截(测试后请恢复为 setenforce 1 并按需配置策略)。三、会话空闲自动断开的优化(保持长连接)
/etc/ssh/sshd_config:
ClientAliveInterval 300(每 300 秒发一次保活)ClientAliveCountMax 3(最多 3 次无响应后断开,约等于 900 秒)systemctl restart sshd/etc/ssh/ssh_config 中加入 ServerAliveInterval 300ssh -o ServerAliveInterval=60 user@hostecho "TMOUT=1800" >> /etc/profile && source /etc/profile(单位秒,0 为不超时)set autologout=30(在相应配置文件中设置)四、连接很慢但不是超时的优化(可选)
/etc/ssh/sshd_config → UseDNS no/etc/ssh/sshd_config → GSSAPIAuthentication no/etc/nsswitch.conf → hosts: files dns(如无需 DNS 可仅保留 files)/etc/ssh/ssh_config → GSSAPIAuthentication no五、快速排查清单与常用命令
nc -vz <IP> 22ss -lntp | grep :22systemctl status sshdfirewall-cmd --list-ports;firewall-cmd --add-port=22/tcp --permanent && firewall-cmd --reloadiptables -L -n | grep :22tcpdump -ni any port 22getenforce / setenforce 0(仅测试)ssh -vvv user@hostsystemctl start|enable|restart sshdss -lntp | grep :22firewall-cmd --list-ports;firewall-cmd --add-port=22/tcp --permanent && firewall-cmd --reloadnc -vz <IP> 22;tcpdump -ni any port 22;ssh -vvv user@host