SSH 连接出现 Connection refused 通常表示目标服务器的 SSH 服务未运行、端口被防火墙拦截或 IP 被安全策略禁止。最推荐的处理方向是优先通过云厂商控制台或 VNC 登录服务器检查 SSH 服务状态,风险边界在于修改防火墙规则可能导致无法远程连接,需保留备用访问通道。
先说结论:Connection refused 是 TCP 层拒绝连接,并非密码错误或超时,需重点排查服务进程与网络放行策略。
- 先确认:服务器 SSH 服务进程是否存活且监听正确端口
- 先处理:检查云服务器安全组和本地防火墙是否放行 SSH 端口
- 再验证:使用 telnet 或 nc 命令测试端口连通性
命令速用版
# 查看 SSH 服务状态
systemctl status sshd
# 查看端口监听情况
netstat -tulpn | grep ssh
# 测试端口连通性
telnet <服务器 IP> <SSH 端口>
为什么会这样
Connection refused 报错的本质是客户端发出的 TCP 连接请求被服务器主动拒绝。
这通常发生在三种场景:目标主机上没有程序监听指定端口、防火墙规则直接丢弃并返回拒绝信号、或 SSH 服务配置限制了访问 IP。与 Connection timed out 不同,refused 代表网络是通的,但服务不可用。
分步处理
步骤 1:确认本地网络环境
适用场景:排除本地网络波动。操作动作:尝试 ping 服务器 IP。验证结果:如果 ping 不通,检查本地路由或服务器是否宕机。风险边界:部分服务器禁 ping,不通不代表服务不可用。
步骤 2:检查 SSH 服务状态
适用场景:SSH 无法连接时。操作动作:通过云控制台 VNC 或物理终端登录,运行 systemctl status sshd。验证结果:状态应为 active (running)。风险边界:若服务未运行,执行 systemctl start sshd 启动,注意不要随意停止正在运行的服务。
步骤 3:检查端口监听
适用场景:服务运行但仍无法连接。操作动作:运行 netstat -tulpn | grep 22。验证结果:确认 SSH 监听在 0.0.0.0 或具体网卡 IP。风险边界:如果只监听 127.0.0.1,外部无法连接,需修改 sshd_config 配置。
步骤 4:检查防火墙与安全组
适用场景:服务正常但端口不通。操作动作:检查服务器内部防火墙(如 ufw 或 firewalld)及云厂商安全组。验证结果:确保入站规则允许 TCP 协议的 SSH 端口。风险边界:修改防火墙规则前需确保当前会话未断开或已有 VNC 备用通道,避免规则生效瞬间丢失连接。
怎么验证是否生效
在本地终端执行 ssh -v user@ip 观察调试输出。如果看到 Connected 字样且开始请求密码或密钥,说明连接已建立。也可以使用 nc -zv <IP> <端口> 测试,返回 succeeded 即为生效。
常见坑
- 云安全组未配置:服务器内部防火墙放行了,但云平台安全组拦截了流量,需两边同时检查。
- SSH 端口修改未同步:修改了 sshd_config 端口后,防火墙和安全组未更新对应规则,导致新端口被拦截。
- Fail2ban 误封:多次密码错误导致 IP 被 Fail2ban 临时禁止,需检查 /var/log/fail2ban.log 并解封 IP。
常见问题
Connection refused 和 Connection timed out 有什么区别?
Connection refused 表示服务器主动拒绝连接,通常是服务未启动或端口被防火墙拒绝;Connection timed out 表示数据包发出后无响应,通常是网络不通或防火墙丢弃包。
修改 SSH 端口后连不上怎么办?
修改端口后必须同步更新云服务器安全组规则和内部防火墙规则,否则新端口会被拦截。
root 用户无法 SSH 登录是 Connection refused 吗?
不是,root 权限问题通常提示 Permission denied,Connection refused 是网络层或服务层未响应。