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