SSH 连不上先别急着重装:用 ssh -v、密钥权限和 known_hosts 把连接问题讲清楚
服务器明明开着,SSH 却连不上,是很多新手最先撞上的墙。第一反应往往是重启服务器、重装 SSH 服务,其实大多数连接失败都出在客户端这一侧,而且报错信息已经把原因写得很清楚了。学会读报错、按顺序排查,一次就能定位问题。
第一步:先看详细报错
直接敲 ssh user@host 只会给一句干巴巴的拒绝,信息太少。加上 -v 参数可以看到握手全过程:
ssh -v user@192.168.1.10
如果还不够细,用 -vvv,输出会包括密钥协商、认证方式尝试的每一步。看输出的最后几行,重点找这几个关键词:Connection refused、Connection timed out、Permission denied、Host key verification failed、no such identity。不同的关键词对应完全不同的排查方向,先分清是哪一类,再动手。
第二类:Connection refused / timed out
Connection refused 表示目标主机能通,但 22 端口没人监听:要么 SSH 服务没启动,要么监听的不是 22 端口。可以在服务器本机执行 ss -tlnp | grep 22 确认服务是否在监听,再用 systemctl status sshd 看服务状态。
Connection timed out 则是网络根本没通:IP 写错、服务器关机、防火墙或安全组没放行 22 端口,都会报这个错。先 ping 一下主机确认网络可达,再检查云服务器的安全组规则——云上买的机器,控制台安全组没放 22 端口是最常见的坑,和服务器里的 sshd 一点关系都没有。
第三类:Permission denied (publickey,password)
这是最常见的一类,意思是服务器拒绝了你提供的认证方式。先分清你用的是密码还是密钥。
用密码登录被拒,先确认账号名没写错、密码没输错,再确认服务器允许密码登录。很多云服务器默认关掉了密码登录,只允许密钥,这时在 sshd_config 里 PasswordAuthentication 是 no,输再多次密码也没用。
用密钥登录被拒,九成是权限问题。SSH 对密钥文件的权限非常挑剔:私钥必须是 600,即只有自己能读;~/.ssh 目录必须是 700;authorized_keys 必须是 600。权限太松,sshd 会直接拒绝使用这把密钥,而且报错不会明说“权限太松”,只会冷冰冰地报 Permission denied。修复很简单:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa ~/.ssh/authorized_keys
另外注意公钥要放在服务器的 ~/.ssh/authorized_keys 里,而且是一行一条,别多出换行或空格;复制公钥时漏了末尾字符,也会直接导致认证失败。
第四类:Host key verification failed
第一次连接某台服务器时,SSH 会把对方的主机指纹记进 ~/.ssh/known_hosts。如果服务器重装过系统、换过 IP,或者你连的是另一台用了相同 IP 的机器,指纹对不上,就会报这个错并拒绝连接。
不要随手删掉整个 known_hosts 文件——里面记着你所有服务器的指纹。用 ssh-keygen -R 主机名或IP 只删掉冲突的那一条,再重新连接并核对新指纹即可:
ssh-keygen -R 192.168.1.10
ssh user@192.168.1.10
重新连接时 SSH 会提示新指纹,核对无误再输入 yes。如果你确定这台服务器就是你自己的、只是重装过系统,这个操作是安全的;如果指纹变化来得莫名其妙,先停下来确认服务器没被人动过。
第五类:找不到密钥文件
no such identity: /home/user/.ssh/id_rsa 说明你指定的密钥文件不存在。可能是密钥文件名不对——比如生成的是 id_ed25519,命令里却写了 id_rsa;也可能是你用了 -i 指定了错误路径。先 ls ~/.ssh/ 看看实际有哪些密钥,再用 -i 指对文件:
ssh -i ~/.ssh/id_ed25519 user@192.168.1.10
也可以把常用配置写进 ~/.ssh/config,给每台服务器起个别名,以后直接 ssh myserver 就行,不用每次都敲 IP 和密钥路径:
Host myserver
HostName 192.168.1.10
User ubuntu
IdentityFile ~/.ssh/id_ed25519
排查顺序小结
SSH 连不上的排查有个固定顺序,按这个顺序走最省时间:先 ssh -v 看报错属于哪一类;网络不通查 IP、端口和安全组;认证被拒查密码开关和密钥权限;指纹冲突用 ssh-keygen -R 清掉单条记录;找不到密钥先 ls ~/.ssh 核对文件名。大部分问题在前两步就能定位,真正需要动服务器配置的反而是少数。
把排错思路记下来,下次再遇到连不上的服务器,先看报错、再动手,十分钟就能解决的事,就不用折腾一上午了。
- 点赞
- 收藏
- 关注作者
评论(0)