SSH 连不上服务器?从端口、密钥到防火墙的排查清单
刚买的云服务器,第一次 SSH 连接就报错,是很多人都遇到过的场景。报错信息五花八门,但排查思路其实是固定的:连接请求从本地出发,依次经过网络、端口、服务、认证四个环节,哪一环断了,问题就出在哪一环。按下面这个顺序排查,大多数连接失败都能在十分钟内定位。
一、先确认网络通不通
在本地终端先 ping 一下服务器地址。如果 ping 不通,先别急着怀疑 SSH,可能是服务器关机、网络不通,或者云厂商默认禁 ping。改用端口探测更直接:
telnet 服务器地址 22
如果显示 Connected,说明网络和端口都没问题,问题在认证环节;如果一直超时,大概率是网络或端口层被挡住了。Windows 没有 telnet 时,可以用 PowerShell 的 Test-NetConnection -ComputerName 地址 -Port 22,效果一样。
二、检查云厂商的安全组
这是新手最容易踩的坑。云服务器除了系统自带的防火墙,云平台还有一层安全组,默认只放行少数端口。登录云控制台,找到这台服务器的安全组,确认入方向放行了 22 端口,来源地址不要写错。如果是刚改的安全组规则,等一两分钟再生效。
三、确认 SSH 服务在运行
能连上云平台的网页控制台时,从控制台登录服务器,检查 SSH 服务状态:
systemctl status sshd
如果服务没运行,先启动它:systemctl start sshd,并设置开机自启:systemctl enable sshd。再用 ss -tlnp | grep 22 看 22 端口是否在监听。如果服务反复起不来,看一眼配置文件语法:sshd -t,有报错会直接指出来。
四、密钥登录的三个常见错误
用密钥登录失败,九成是权限或配置问题。逐项核对:
1. 私钥文件权限太开放会被 SSH 客户端直接拒绝,改成仅自己可读:chmod 600 私钥文件。
2. 服务器上 ~/.ssh 目录应为 700,authorized_keys 文件应为 600,属主必须是登录用户本人。
3. 公钥内容要完整粘贴进 authorized_keys,一行一条,不能多换行、不能带多余空格。
另外看一眼 /etc/ssh/sshd_config 里的 PubkeyAuthentication 是否为 yes,改完配置记得重启服务:systemctl restart sshd。
五、密码登录被禁用的情况
很多云镜像默认禁止密码登录,只允许密钥登录。这时用密码连接会直接提示 Permission denied。解决办法是用密钥登录一次,在配置文件里把 PasswordAuthentication 改为 yes 再重启服务;或者直接在云控制台重置密码后用密钥方式重新配置。生产环境更推荐保持密钥登录,只在排查期间临时放开密码。
六、用日志和调试模式定位
如果以上都没问题,打开 SSH 的调试输出再连一次:
ssh -v 用户名@服务器地址
-v 会逐行打印握手过程,卡在哪一步一目了然。服务器端也可以看认证日志:Debian/Ubuntu 看 /var/log/auth.log,CentOS/RHEL 看 /var/log/secure,或者用 journalctl -u sshd -n 50 看最近的服务日志。日志里出现 "Authentication refused: bad ownership or modes" 就是权限问题,"Connection refused" 是服务或端口问题。
排查清单
按这个顺序走一遍:端口通不通、安全组放没放、服务在不在跑、密钥权限对不对、密码登录开没开、最后看日志。把每一步的结果记下来,哪怕最后要求助他人,这份记录也能让对方快速接手。SSH 连接问题看起来吓人,但它永远只发生在链路上的某一个点,逐段排除,就一定能找到。
- 点赞
- 收藏
- 关注作者
评论(0)