SSH连不上VPS,先保留完整报错,再决定查哪里。连接超时、连接被拒绝和认证失败,通常对应不同的排查入口。
如果提示连接超时,应先检查IP、端口和网络访问规则;如果提示连接被拒绝,应重点确认目标端口是否有服务监听;如果提示密码或密钥认证失败,说明连接已经进入认证阶段,应检查用户名和凭据。
本文面向通过SSH管理的Linux VPS。服务器端命令以使用systemd的Ubuntu、Debian等常见发行版为例,其他系统的服务名和日志路径可能不同。Windows远程桌面连接故障不在本文范围内。
先根据SSH报错确定排查方向
下面列出常见报错文本及其含义,不是某台LuckVM服务器的实测记录。单条报错只能缩小范围,不能直接证明唯一原因。
| 报错或现象 | 通常意味着什么 | 优先检查 |
|---|---|---|
Connection timed out |
在等待时间内没有完成对应连接阶段 | 公网IP、端口、网络路径、过滤规则 |
Connection refused |
连接请求收到拒绝响应 | 端口是否正确、SSH是否监听、是否存在主动拒绝规则 |
Permission denied (publickey,password) |
SSH连接已进入认证阶段,但所提供的认证未通过 | 用户名、密码、密钥、登录策略 |
Could not resolve hostname |
主机名没有被正确解析 | 域名拼写、DNS记录、本地解析环境 |
REMOTE HOST IDENTIFICATION HAS CHANGED |
服务器主机密钥与本机记录不一致 | 是否重装、IP是否变更、服务器身份是否可信 |
如果网站能打开但SSH连不上,不能据此认定整台VPS断网:网站通常使用80或443端口,而SSH默认使用22端口,两者可以受到不同规则控制。
第一步:核对IP、端口和用户名
进入服务商控制台,确认实例处于运行状态,并核对公网IP与实际SSH端口。重装系统、更换实例或修改网络配置后,旧的连接配置可能已经失效。
- IP:本机通过公网连接时,应使用可达的公网地址;私有地址需要相应的内网或隧道环境。
- 端口:默认通常是22,但经过自定义修改的实例应使用实际端口。
- 用户名:应以系统镜像或创建实例时的说明为准,不能假定所有系统都允许root直接登录。
Windows PowerShell中可以先保存本次排查使用的参数。请将以下值替换为自己的实际信息;192.0.2.10是文档示例地址,不能用于实际连接:
$serverIp = '192.0.2.10'
$sshPort = 22
$sshUser = 'ubuntu'
ssh -p $sshPort "$sshUser@$serverIp"
其中,-p指定SSH端口。需要已安装OpenSSH客户端;如果系统提示找不到ssh命令,应先处理本机客户端安装问题。
预期结果:获得针对正确目标的连接结果,排除连错IP、端口或账号等基础问题。后续PowerShell命令沿用本节变量,应在同一会话中执行。
第二步:从本机检查TCP端口
在Windows PowerShell中执行:
Test-NetConnection -ComputerName $serverIp -Port $sshPort -InformationLevel Detailed
TcpTestSucceeded字段为True表示端口连通,为False表示端口不可达。重点查看TcpTestSucceeded字段,而不是只看Ping结果。
- True:当次TCP连接测试成功,可以继续检查SSH握手与认证;这不代表登录凭据正确。
- False:当次端口测试失败,需继续排查服务监听、访问规则或网络路径,不能直接判断服务器已经关机。
在Linux或macOS终端中,可以使用已安装的OpenSSH客户端输出详细连接信息:
ssh -vvv -o ConnectTimeout=10 -p 22 ubuntu@192.0.2.10
执行前同样需要替换用户名、地址与端口。-vvv增加调试输出,ConnectTimeout=10设置连接超时时间为10秒。
预期结果:区分连接尚未建立、SSH握手异常和认证失败。日志中出现本地文件路径、账号或IP时,对外分享前应按需脱敏,不要附带私钥内容。
如果换到手机热点后可以连接,而原网络持续失败,应重点比较两边的访问路径、来源IP限制及本地网络策略;不要仅凭一次成功就排除服务器端的间歇性问题。
第三步:通过控制台检查SSH服务
当公网SSH不可用时,可以使用服务商提供的网页控制台、VNC或串口控制台进入系统,具体以当前产品支持的功能为准。若没有可用入口,应联系技术支持协助恢复。
先查看监听端口和服务状态。以下命令在服务器控制台中执行:
sudo ss -lntp
sudo systemctl status ssh --no-pager
ss -lntp查看22端口是否有sshd进程监听,再用systemctl status ssh确认SSH服务处于active(running)状态,这是判断服务端正常的关键。Ubuntu、Debian常见服务名为ssh。若提示该单元不存在,可检查发行版是否使用sshd:
sudo systemctl status sshd --no-pager
预期结果:确认SSH相关服务状态,并在监听列表中找到实际端口。某些系统采用socket激活,应结合ssh.socket等相关单元与实际监听结果判断,不能只凭服务显示inactive认定故障。
如果服务只监听127.0.0.1,公网客户端无法直接连接该监听地址;如果端口与客户端配置不同,则应核对最近的配置变更。
修改过SSH配置后,先检查语法
sudo /usr/sbin/sshd -t
路径以实际安装位置为准。正常情况下,该检查成功时不输出文本并以状态码0退出;出现错误时,通常会给出相关文件或配置项。
继续查看近期日志。使用ssh服务名的系统可执行:
sudo journalctl -u ssh --since "30 minutes ago" --no-pager
服务名为sshd时,将命令中的ssh替换为sshd。如果日志为空,还需检查发行版的认证日志或系统日志配置。
只有确认问题并通过配置检查后,才考虑重新加载相应服务。保留可用的控制台或旧会话,避免在没有恢复入口的情况下反复修改配置。
第四步:检查防火墙与安全组
SSH服务正常监听,并不代表公网请求一定能到达。常见的过滤位置包括云平台安全组、系统防火墙,以及Fail2ban等登录防护工具。
先检查服务商控制台中的入站规则
核对是否允许实际SSH端口的TCP入站访问,并检查来源地址范围。如果规则只允许办公室公网IP,切换到家庭网络后就可能被拦截。
使用IPv6连接时还需检查IPv6规则,不能把允许IPv4来源视为已允许IPv6来源。
再检查系统正在使用的防火墙
以下命令按系统实际使用的工具选择,不需要为了排查而同时安装或启用多套防火墙:
# 使用UFW的系统
sudo ufw status verbose
# 使用firewalld的系统:先确认活动区域
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all --zone=public
# 使用nftables的系统
sudo nft list ruleset
firewalld示例中的public需替换为实际绑定网卡或来源的区域。还应留意运行时规则与永久配置是否一致。
预期结果:找到与实际端口、来源地址和网络接口匹配的放行或拒绝规则。修复时优先调整必要规则,不要把清空全部规则或长期关闭防火墙当成默认解决办法。
第五步:排查密码和密钥认证失败
出现Permission denied时,重点应转向认证。反复测试Ping或升级带宽,通常不能解决用户名错误、密钥不匹配或登录策略限制。
用户名与认证方式是否匹配?
先确认系统要求使用哪个账号,以及是否允许密码登录。仅允许密钥登录的实例,输入正确的账号密码也不一定能通过SSH认证。
如果需要指定密钥,在Windows PowerShell中可使用:
ssh -i "$env:USERPROFILE\.ssh\id_ed25519" -o IdentitiesOnly=yes -p $sshPort "$sshUser@$serverIp"
请将路径替换为实际私钥文件。-i指定密钥;IdentitiesOnly=yes可用于限制客户端使用明确配置的身份,帮助排查代理中存在大量密钥时的认证问题。
服务器上是否安装了对应公钥?
通过控制台检查目标账号的公钥配置、文件归属和权限。常见位置是该账号家目录中的.ssh/authorized_keys,但也可能由AuthorizedKeysFile或其他认证机制指定。
在常见OpenSSH配置下,.ssh目录权限700、公钥文件权限600是常用设置,还要确认文件所有者正确,并结合服务器日志判断。不要把本机私钥上传为服务器公钥文件。
主机密钥变化时,不要直接跳过校验
重装系统可能导致主机密钥变化,但连接到了错误服务器或出现异常中间环节也可能触发同类告警。应先通过可信控制台或服务商渠道核实新的主机密钥指纹,再更新本机已知主机记录。
恢复连接后如何验证,避免再次失联?
保留当前控制台或已连接会话,另外打开一个终端,使用准备长期采用的IP、端口、用户名和认证方式重新登录。
- 确认新会话确实能够建立,而不是只有旧会话仍在运行。
- 确认需要的管理权限正常,核对服务状态与近期日志。
- 检查防火墙修改是否需要持久化,核对SSH服务的启动或socket激活配置。
- 记录故障时间、完整报错、定位依据和实际修改,便于后续追踪。
使用LuckVM VPS时,可以先在实例控制台核对运行状态、IP和连接信息;控制台功能、网络规则与恢复方式以当前产品界面和官方说明为准。提交工单时,附上故障时间、来源网络、目标端口和已脱敏的报错,比只描述“服务器连不上”更容易定位。
如果SSH已经能够稳定登录,但网站仍然加载缓慢,可以继续阅读VPS带宽多少够用:页面传输量与带宽计算,区分连接故障与业务传输瓶颈。
常见问题
Ping不通,就说明VPS宕机了吗?
不一定。Ping使用的ICMP流量可能被限制,而SSH使用TCP。应结合实例状态、实际端口测试和控制台检查判断。
SSH连接被拒绝,是密码错误吗?
通常不是。连接被拒绝一般发生在认证之前,应先检查端口、监听服务和主动拒绝规则。密码错误通常表现为认证失败。
换一个SSH端口就能解决连接超时吗?
只有原端口相关限制确实是原因时,调整端口才可能有帮助。改端口还需要同步处理服务监听、云端规则、系统防火墙和客户端设置,不能作为通用修复方法。
可以直接重装VPS解决吗?
重装可能覆盖数据,也不一定解决来源IP限制或外部网络问题。应先通过控制台定位原因;确需重装时,先确认备份和恢复方案。
连接成功后过一段时间掉线怎么办?
这与一开始就连不上不同,应检查网络中断、NAT空闲回收、服务端会话策略和系统负载。客户端保活设置可能帮助处理部分空闲连接问题,但不能修复实际断网或服务异常。
参考资料:




