Linux服务器连接不上,多数情况是网络链路断了、sshd服务没起来或认证被拒这三类问题,按“网络通不通→端口开不开→服务在不在→认证过不过”的顺序排查,十分钟内基本能定位。
linux服务器连不上怎么排查网络链路
网络层不通,后面都白搭,先把网络链路当成唯一怀疑对象。
本地ping不通服务器先看网关和IP冲突
命令行执行ping 服务器IP,如果完全无响应,不一定就是服务器挂了。
先确认自己本地网络正常:ping 网关IP,再用ip addr或ipconfig检查本机IP、掩码、网关是否写错。
服务器侧可执行ip addr show看网卡有没有拿到IP,arping 网关IP看二层通不通,同一子网出现另一台机器抢了服务器IP,会造成时通时断,云服务器还要注意公网IP是不是弹性IP,重启后可能已经换地址。
端口探测:nc和telnet比ping更接近真实连接
ping走的是ICMP协议,很多云平台默认不禁ping,但禁TCP端口,所以ping通不代表能连上ssh。
更接近真实ssh连接的命令是:
nc -zv 服务器IP 22telnet 服务器IP 22
如果输出Connected,说明网络和端口都通,如果一直timed out,基本判断为防火墙或安全组丢弃SYN包。
服务器ssh连接不上原因:防火墙与安全组占了大多数
行业共识认为,端口探测失败时,优先怀疑防火墙和安全组,而不是sshd本身。
iptables和firewalld拦截22端口
Linux本地防火墙分两类:iptables(含nftables)和firewalld。
检查命令:
iptables -L -n --line-numbersfirewall-cmd --list-all
如果看到默认策略是DROP,且没有放行22端口,连接自然失败,放行方法:
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
或者用iptables -I INPUT -p tcp --dport 22 -j ACCEPT。
云服务器ssh无法连接还要查安全组

云厂商的安全组相当于外置防火墙,服务器内部firewalld放行了22,安全组没放行,照样连不上。
登录云控制台,检查实例绑定的安全组入方向规则:
- 协议:TCP
- 端口:22
- 源IP:
0.0.0/0或你当前出口IP
很多人在安全组里只放行了80和443,漏了22,还有一类情况:安全组出方向默认全放行,但入方向全部拒绝,导致sshd收不到任何包。
sshd服务自身问题:连接拒绝和连接超时是两种信号
网络通、端口探测结果不同,已经把问题范围缩小到sshd服务本身。
connection refused说明服务没监听或端口改了
如果nc返回Connection refused,目标IP在线,但22端口没程序监听。
排查:
ss -tlnp | grep 22
systemctl status sshd
若ss没有显示22监听,说明sshd没启动、启动失败,或者/etc/ssh/sshd_config里Port被改成了非22端口。
启动服务:systemctl start sshd,并设置开机自启:systemctl enable sshd。
如果服务启动失败,直接看journalctl -u sshd -n 50,多半是配置文件语法错误。
connection timed out多数是网络层或半连接阻塞
timed out意味着SYN包发出后没收到回应,这和refused有本质区别。
可能原因:
- 云安全组/防火墙直接丢弃22端口包
- 服务器内部iptables规则把22端口
DROP而不是REJECT - 目标IP在异地,中间路由丢包
- 服务器IP被云平台或运营商封禁
REJECT会回一个拒绝包,客户端立刻收到refused;DROP则静默丢弃,客户端只能等超时,这是区分refused和timed out的关键。
认证阶段失败:密码和密钥是最后一道坎
端口通了,服务也在监听,但卡在登录提示后,说明问题出在认证。
密码登录提示permission denied怎么处理
最常见的是密码输错,别急着怀疑键盘,先确认:
- 是否打开了大小写锁定
- 密码里是否含有需要转义的特殊字符
- 服务器是否禁用了密码登录

/etc/ssh/sshd_config里如果PasswordAuthentication no,密码登录直接失败,临时用密钥登录后改回yes,或者用厂商控制台的VNC登录修改。
另一个隐蔽原因是PAM账户锁定,连续输错密码被pam_tally2或fail2ban锁定,也会显示permission denied,查看/var/log/secure(Debian系为/var/log/auth.log)能看到具体拒绝原因。
私钥登录失败先查权限和SELinux
密钥登录失败常表现为Permission denied (publickey)。
本地私钥权限过松,sshd会拒绝使用,执行:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
服务器端/home/用户名/.ssh/authorized_keys权限必须是600,.ssh目录700,否则sshd直接忽略公钥。
开启SELinux的机器,/home目录或.ssh目录上下文错误也会导致读取失败,执行restorecon -R -v /home/用户名/.ssh恢复默认上下文。
资源耗尽也会让linux远程连接失败
服务器活着,但资源被吃光,连sshd本身都跑不动。
常见情况:
- 内存耗尽触发OOM,sshd进程被杀
- CPU被挖矿进程占满,sshd无法响应握手
- 磁盘100%写满,sshd无法记录日志导致拒绝连接
- 文件描述符耗尽,新连接无法建立
登录不上的时候,通过云厂商VNC或控制台进入,执行:
uptime看负载free -h看内存df -h看磁盘dmesg | tail看OOM记录
查出占用资源的进程后,确认不是业务进程再kill。
linux远程连接失败解决方法:从日志里找直接答案
业内专家指出,盲目重启服务器不如先花两分钟看日志,日志里通常写着明确的拒绝理由。
journalctl和/var/log/secure看拒绝记录
systemd系统的sshd日志:
journalctl -u sshd -n 100 --no-pager

传统syslog日志:
tail -n 100 /var/log/secure # CentOS/RHEL
tail -n 100 /var/log/auth.log # Debian/Ubuntu
重点看Failed password、Invalid user、Connection closed by authenticating user、refused connect等关键行。
ssh -vvv把握手过程全部打印出来
从客户端执行ssh -vvv 用户名@服务器IP,会把版本协商、密钥交换、认证方法全部打印出来。
卡在哪一步,问题就出在哪一步:
- 卡在
Connecting to x.x.x.x:网络不通 - 出现
Connection refused:服务没监听 - 出现
Permission denied:认证失败 - 出现
Connection reset by peer:服务器主动断开,查看fail2ban或hosts.deny
排查顺序固定为网络→端口→服务→认证→资源,每一步都有明确命令,不需要凭感觉重启。
常见问题:linux服务器连接不上相关疑问
linux服务器连接不上怎么判断是网络问题还是服务问题?
先用ping 服务器IP测试ICMP通路。ping通,再用nc -zv 服务器IP 22测试TCP端口。nc返回Connected,说明网络和端口都正常,问题在sshd服务或认证。nc返回refused,说明服务没监听22。nc超时,说明防火墙或安全组拦截。ping都不通,先查本地网络、IP冲突、路由和安全组。
本地能ping通服务器但ssh连不上是什么原因?
大概率是三个原因之一:服务器防火墙或云安全组没有放行22端口,sshd没有监听22端口,或者fail2ban、hosts.deny把当前IP拉黑,按ss -tlnp、firewall-cmd --list-all、iptables -L -n、grep sshd /var/log/secure的顺序查,多数情况下十分钟内能找到原因。
SSH连接时出现Connection refused和Connection timed out分别代表什么?
Connection refused表示目标主机在线,但22端口无程序监听,通常是sshd未启动或端口被改。Connection timed out表示数据包发出后未收到任何回应,通常是防火墙或安全组静默丢弃、路由不可达或服务器IP被封禁,前者查服务,后者查网络和安全组,定位路径不同。
