SSH连接被拒绝(Connection refused)的8种解决方法
问题现象
当尝试通过SSH连接远程服务器时,可能会遇到以下错误:
ssh: connect to host [IP地址] port 22: Connection refused
常见原因分析
SSH服务未运行
防火墙阻止了22端口
SSH服务监听了非标准端口
服务器网络配置问题
IP地址或主机名错误
服务器负载过高
SSH配置限制
网络连接问题
8种解决方法
1. 检查SSH服务状态
在Linux服务器上执行:
sudo systemctl status sshd
如果服务未运行,启动它:
sudo systemctl start sshd
sudo systemctl enable sshd
2. 检查防火墙设置
查看防火墙是否开放22端口:
sudo ufw status # Ubuntu
sudo firewall-cmd --list-ports # CentOS
开放22端口:
sudo ufw allow 22 # Ubuntu
sudo firewall-cmd --add-port=22/tcp --permanent # CentOS
sudo firewall-cmd --reload
3. 检查SSH是否监听正确端口
查看SSH服务监听的端口:
sudo netstat -tulnp | grep ssh
如果端口不是22,连接时需要指定端口:
ssh -p [端口号] username@hostname
4. 检查服务器网络连接
确保服务器可以访问外网:
ping 8.8.8.8
检查服务器IP配置:
ip addr show
5. 验证IP地址和主机名
确认你使用的是正确的服务器IP地址或主机名。
6. 检查服务器负载
如果服务器负载过高,可能会拒绝新连接:
uptime
top
7. 检查SSH配置文件
查看/etc/ssh/sshd_config文件,确保没有限制连接:
sudo nano /etc/ssh/sshd_config
检查以下参数:
Port 22
ListenAddress 0.0.0.0
PermitRootLogin yes
修改后重启SSH服务:
sudo systemctl restart sshd
8. 检查本地网络
确保本地网络可以连接到服务器:
telnet [服务器IP] 22
如果无法连接,可能是本地网络问题。
总结
SSH连接被拒绝可能有多种原因,按照上述步骤逐一排查,通常可以解决问题。如果问题仍然存在,建议查看服务器日志获取更多信息:
sudo tail -f /var/log/auth.log # Ubuntu/Debian
sudo tail -f /var/log/secure # CentOS/RHEL