当某台Linux服务器无法通过SSH连接时,可以按照以下步骤进行排查和解决:
ping 目标服务器IP
在目标服务器上执行:
systemctl status sshd
# 或
service sshd status
如果服务未运行:
sudo systemctl start sshd
sudo systemctl enable sshd
在目标服务器上执行:
netstat -tuln | grep 22
# 或
ss -tuln | grep 22
如果未监听22端口:
- 检查SSH配置文件 /etc/ssh/sshd_config
中的 Port
设置
- 确认SSH服务是否绑定到了正确IP
在目标服务器上检查防火墙规则:
# 对于iptables
sudo iptables -L -n
# 对于firewalld
sudo firewall-cmd --list-all
# 对于ufw
sudo ufw status
如果需要开放SSH端口:
# iptables
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# firewalld
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
# ufw
sudo ufw allow 22/tcp
编辑 /etc/ssh/sshd_config
文件,确认以下关键设置:
PermitRootLogin yes/prohibit-password
PasswordAuthentication yes
AllowUsers 用户名
修改后重启SSH服务:
sudo systemctl restart sshd
getenforce
如果是Enforcing模式,可以尝试:
sudo setenforce 0
或为SSH添加SELinux规则
在客户端查看详细错误:
ssh -vvv 用户名@服务器IP
在服务器端查看SSH日志:
sudo tail -f /var/log/auth.log
# 或
sudo journalctl -u sshd -f
如果以上步骤都无效,可以尝试:
- 使用telnet测试端口连通性:telnet 服务器IP 22
- 临时关闭所有防火墙进行测试
- 检查是否有TCP Wrapper限制(/etc/hosts.allow和/etc/hosts.deny)
- 检查网络连接跟踪表是否满(dmesg | grep nf_conntrack
)
通过以上步骤的系统性排查,应该能够定位并解决SSH连接问题。