SSH 连不上服务器?从报错信息一层层定位
【摘要】 SSH 连不上服务器?从报错信息一层层定位SSH 连不上时,报错本身就是最好的线索:Connection timed out、Connection refused、Permission denied (publickey),每一种指向的环节都不一样。不要一上来就重启服务器或重装系统,先把报错对上号,再按从外到内的顺序查。 一、先看报错,定方向Connection timed out(超时)...
SSH 连不上服务器?从报错信息一层层定位
SSH 连不上时,报错本身就是最好的线索:Connection timed out、Connection refused、Permission denied (publickey),每一种指向的环节都不一样。不要一上来就重启服务器或重装系统,先把报错对上号,再按从外到内的顺序查。
一、先看报错,定方向
- Connection timed out(超时):包根本没到服务器,或回包被挡住了。重点查网络通路:安全组、EIP、本机防火墙。
- Connection refused(拒绝连接):包到了服务器,但 22 端口没人在监听。重点查 sshd 服务本身。
- Permission denied (publickey / password):网络和服务都通了,卡在身份验证上。重点查密钥、权限、账号状态。
- Host key verification failed:服务器指纹变了(重装、换 IP 复用),本地 known_hosts 里还是旧指纹。确认服务器确实是你自己的之后再更新指纹,不要盲目跳过校验。
先把完整报错记下来,带上 -v 再跑一次,信息会多很多:
ssh -v -i ~/.ssh/id_ed25519 root@<弹性公网IP>
二、超时:先确认网络通路
超时是最容易误判的一类,因为它和“安全组放行了还是不通”是同一条链路:
ping <弹性公网IP> # 只验证 IP 可达,不代表端口通
telnet <弹性公网IP> 22 # 或 nc -vz <弹性公网IP> 22
- ping 不通、端口也不通:先查实例有没有绑定弹性公网 IP,访问地址是不是内网 IP 或已释放的旧地址。
- ping 通、22 端口不通:逐项核对安全组入方向规则(TCP 22、来源、优先级、绑对实例网卡没有),再查本机 firewalld / iptables / ufw 有没有放行 22。
- 换个网络再试一次:如果公司或校园网封了出方向 22,换手机热点常能立刻区分是服务器问题还是本地网络问题。
三、拒绝连接:查 sshd 是不是真的在跑
包到了、端口没人接,通常是 sshd 没启动、监听地址不对、或端口被改了:
systemctl status sshd --no-pager
ss -tlnp | grep ':22'
cat /etc/ssh/sshd_config | grep -E '^(Port|ListenAddress|PermitRootLogin|PasswordAuthentication|PubkeyAuthentication)'
- sshd 没跑:
systemctl start sshd后再看日志里为什么挂掉,journalctl -u sshd --since "30 minutes ago" --no-pager。 - sshd 在跑但监听的不是 22:看
Port是不是被改成了别的端口,连接时就要加-p <端口>。 - 刚改过配置没生效:改完 sshd_config 要
systemctl reload sshd,只保存文件是不生效的。
四、验证失败:密钥、权限、账号三件套
网络通、服务在,却被 Permission denied 挡住,九成是下面三处之一:
- 密钥对不上:本地
-i指定的私钥是不是和服务器上~/.ssh/authorized_keys里那把公钥配对。换一台机器、换一个密钥文件都会对不上。 - 权限太松:SSH 对权限很敏感,太松会被直接拒绝:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
- 账号被锁或禁了密码登录:
PasswordAuthentication no时密码再对也登不上去;root 被PermitRootLogin prohibit-password限制时,只能用密钥。确认用的是允许的登录方式和账号。
排查时用 -v 看最后卡在哪一步:Offering public key 之后被拒,是密钥问题;根本没走到这一步,是前面的网络或服务问题。
五、指纹变化:先确认,再更新
重装系统、实例重建后,服务器指纹会变,客户端会直接拒绝连接并提示中间人风险:
ssh-keygen -R <弹性公网IP>
先通过控制台、VNC 或可信渠道确认这台服务器确实是你重建的那台,再执行上面这条清掉旧指纹重新连接。不要在没确认的情况下用 StrictHostKeyChecking=no 绕过去,那是把校验整个关掉。
六、排查清单(收藏版)
- 报错是哪一种:超时、拒绝、验证失败、指纹变化?
ssh -v:卡在哪一步?- 超时:EIP、安全组入方向 22、本机防火墙、换网络复测。
- 拒绝:sshd 在跑吗?监听端口是多少?改配置后 reload 了吗?
- 验证失败:密钥配对吗?
~/.ssh700、authorized_keys600 吗?账号允许这种登录方式吗? - 指纹变化:确认是自己的服务器后,再
ssh-keygen -R更新。
按报错分流、一步验证一个结论,大多数 SSH 连不上都能在半小时内定位到具体一层,而不是把所有配置都改一遍再碰运气。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)