SSH 连不上先别急着重装:用 ssh -v、密钥权限和 known_hosts 把连接问题讲清楚

举报
yd_294877891 发表于 2026/11/10 08:44:55 2026/11/10
【摘要】 服务器明明开着,SSH 却连不上,是很多新手最先撞上的墙。第一反应往往是重启服务器、重装 SSH 服务,其实大多数连接失败都出在客户端这一侧,而且报错信息已经把原因写得很清楚了。学会读报错、按顺序排查,一次就能定位问题。 第一步:先看详细报错直接敲 ssh user@host 只会给一句干巴巴的拒绝,信息太少。加上 -v 参数可以看到握手全过程:ssh -v user@192.168.1.1...

服务器明明开着,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 核对文件名。大部分问题在前两步就能定位,真正需要动服务器配置的反而是少数。

把排错思路记下来,下次再遇到连不上的服务器,先看报错、再动手,十分钟就能解决的事,就不用折腾一上午了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。