SSH连接远程服务器被拒绝故障求助:可Ping通但无法连接
排查SSH连接被拒绝(connection refused)的方案
既然你已经确认了sshd服务正常运行、端口处于监听状态且能ping通目标IP,那咱们从几个容易被忽略的方向来排查这个ssh connect to host X.X.X.X port 22: connection refused错误:
防火墙/安全组拦截
能ping通只说明ICMP协议被允许,但TCP 22端口可能被防火墙或安全组挡住了。- 服务器本地防火墙:执行
ufw status(Debian/Ubuntu)或firewall-cmd --list-all(CentOS/RHEL),确认有没有允许22端口的入站规则。如果没有,添加规则后重启防火墙。 - 云服务商安全组:如果你用的是云服务器,一定要检查控制台的安全组配置,确保入站规则里开放了22端口(来源可以暂时设为你的公网IP测试)。
- 服务器本地防火墙:执行
sshd配置的隐藏限制
打开/etc/ssh/sshd_config文件,检查几个关键项:Port:是否被改成了非22的端口?如果是,连接时需要加上-p 自定义端口参数。ListenAddress:是否只绑定了内网IP(比如192.168.x.x)而不是0.0.0.0?如果是,外网IP无法连接到sshd。AllowUsers/DenyUsers:有没有设置用户白名单/黑名单,导致你使用的账号被拒绝?
修改配置后记得重启sshd:sudo systemctl restart sshd
端口监听的细节问题
再仔细核对netstat -tulnp | grep sshd的输出:- 确认监听的地址是
0.0.0.0:22(IPv4所有地址)还是:::22(仅IPv6)。如果只监听IPv6,而你用IPv4地址连接,就会出现拒绝。可以在sshd_config里添加ListenAddress 0.0.0.0来强制监听IPv4。
- 确认监听的地址是
TCP连通性验证
用更直接的工具测试端口是否可达:- 执行
telnet X.X.X.X 22或nc -zv X.X.X.X 22,如果同样显示连接被拒绝,说明问题在网络层面而非SSH服务。 - 同时在服务器上执行
lsof -i :22,确认只有sshd进程在占用22端口,避免端口被其他进程抢占。
- 执行
抓包排查数据包流向
在服务器上启动抓包:tcpdump port 22,然后从本地发起SSH连接。如果服务器端没抓到任何包,说明数据包根本没到达服务器(问题在路由或上层防火墙);如果抓到了包但没有响应,再回头检查sshd的日志(/var/log/auth.log或/var/log/secure),看有没有具体的错误信息。
内容的提问来源于stack exchange,提问作者user3855998
相关产品推荐
相关产品推荐

