You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:42:45