LHIDC

SSH 提示 `Connection refused` 是什么原因?服务和端口怎么查

SSH 出现 Connection refused 时,重点不是密码,而是目标端口为什么没有 SSH 服务响应。本文从端口监听、服务状态、配置语法和防火墙拒绝几个角度展开。

`Connection refused` 是 SSH 排查里很有指向性的报错。它通常表示目标 IP 能到达,但你连接的端口没有服务接收,或者服务端主动拒绝连接。因此这篇文章不按“从头排查 SSH”来写,而是专门回答一个问题:为什么端口会拒绝连接。

这个报错和超时有什么区别

`Connection timed out` 像是敲门没人回应;`Connection refused` 更像是门口有人明确说“这里没有这个服务”。所以看到 refused 时,优先查端口和服务,而不是先查密码。

检查结果说明下一步
端口无监听SSH 未启动或监听在其他端口查 `systemctl` 和 `ss`
监听在其他端口客户端连错端口用 `ssh -p` 指定端口
服务启动失败配置或密钥文件异常查 journal 日志
只监听 127.0.0.1外部无法访问查 `ListenAddress`

第一步:确认是不是连错端口

如果服务器 SSH 改成了 2222,连接命令必须写:

ssh -p 2222 root@服务器IP

只输入 `ssh root@服务器IP` 会默认连接 22。很多用户改了 SSH 端口后,忘记改终端工具里的端口,看到的就是拒绝连接。

第二步:看 sshd 是否运行

通过控制台进入服务器后执行:

systemctl status sshd

`active (running)` 表示服务运行中;`failed` 表示启动失败;`inactive` 表示未运行。如果失败,继续看:

journalctl -u sshd -n 100 --no-pager

常见线索包括配置项拼错、端口已被占用、主机密钥文件权限异常。日志里如果出现 `Bad configuration option`,说明配置文件有不被识别的选项;如果出现 bind 相关错误,说明端口绑定失败。

第三步:确认端口实际监听

ss -lntp | grep sshd

如果完全没有输出,说明 SSH 服务没有监听。若看到 `0.0.0.0:2222`,说明外部可以尝试连接 2222。若看到 `127.0.0.1:22`,说明只允许本机连接,外部请求会失败。

也可以指定端口检查:

ss -lntp | grep ':22'

没有输出就代表 22 端口没有监听进程。

第四步:配置修改前先做语法测试

SSH 配置文件通常是:

/etc/ssh/sshd_config

修改后不要马上重启,先执行:

sshd -t

没有输出通常表示语法通过。有输出就先修复。强行重启可能导致本来还能用的 SSH 也起不来。

防火墙会不会导致 refused

多数防火墙拦截更常见的是超时,但某些规则会主动拒绝连接。可以检查:

iptables -S
firewall-cmd --list-all
ufw status

云服务器还要看安全组。端口监听正常,但外部仍然拒绝或不可达时,系统防火墙、面板防火墙和云安全组都要一起看。

最容易出错的操作顺序

不要先关闭旧端口,再测试新端口。更安全的顺序是:先放行新端口,修改 SSH 配置,重启 sshd,另开一个终端测试新端口,确认能登录后再收紧旧端口。

如果服务器上还运行网站、数据库或游戏服,不建议为了 SSH refused 直接重启整机。先通过控制台确认 sshd 和端口状态,通常能更快恢复访问,也不会影响正在运行的业务。

上一篇 香港服务器速度到底怎么样?大陆三网、国际线路与延迟表现一次看懂 下一篇 SSH 登录提示 `Permission denied`,密码和密钥应该怎么检查

LHIDC 产品中心

继续查看可购买的海外服务器产品

文章用于辅助选型,最终价格、库存与配置请以产品详情页和下单页面展示为准。

查看产品 查看方案