SSH 免密登录故障排查指南

正常情况下,按照密钥对,并将公钥加入到服务其的 ~/.ssh/authorized_keys 中即可实现免密登录。

但也会意外情况,最近遇到了即使确认配置无误但仍然需要输入密码的问题,这里对排查过程进行记录,把所有可能的情况进行梳理。

无法免密登录可能的原因

1. 文件和目录权限问题

检查 user 用户的 ~/.ssh 目录和 ~/.ssh/authorized_keys 文件权限,不合理的权限配置可能会被 SSH 服务拒绝。

因此,这里必须将 ~/.ssh 设置为 700,将 ~/.ssh/authorized_keys 设置为 600

# 在远程服务器上的目标用户的home(~指向的地址)执行
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

~ 会指向当前用户的 home 目录,如果是 root 用户想要指定 user 的对应配置文件及目录,需要使用绝对路径。 一般情况下,user 目录的绝对路径是 /home/user/; 绑定了数据盘,也有可能在 /data/home/user,视具体情况而定。

2. SSH 配置文件

这个可能是容易被忽略的问题,一般情况下 SSH 配置不会有问题,但是如果出现了确认以上配置无误还是无法连接时,要检查下 SSH 配置文件 etc/ssh/sshd_config,确保一下设置是启用的:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

这两项分别开启了公钥认证功能和公钥文件的位置,修改完之后,需要重启 sshd 服务

sudo systemctl restart sshd

根据系统,重启命令可能不同,如果提示 systemctl 找不到,可以尝试 sudo service sshd restart

3. 用户 home 目录的权限问题

如果要使用 user 免密登录,必须要确保 user 的 home 目录不对其他用户开放权限 。因为如果其他用户可以写 user 的 home 目录,SSH 可能会拒绝登录,因为这个认为是不安全的,因此 home 目录应该限制为只有自己可以写入。

chmod 755 /data/home/user

日志分析

如果以上原因都已排查,还是无法免密登录,可以使用 SSH 服务的日志文件,可能会有登录失败的相信信息,帮助进行诊断。对于 systeme 系统(包含 Fedora、Ubuntu、Debian、CentOS/RHEL 7 及更高版本),可以使用以下命令:

sudo journalctl -u sshd

比如我这边在排查时,发现日志内容如下:

-- Logs begin at Tue 2024-03-19 10:34:54 CST, end at Thu 2024-03-21 10:19:04 CST. --
Mar 21 10:12:26 VMOS sshd[767024]: DBG|operate_common.h|55|MakeNslcdInteraction|action=1001, interaction ok
Mar 21 10:12:26 VMOS sshd[767024]: DBG|operate_common.h|55|MakeNslcdInteraction|action=5003, interaction ok
Mar 21 10:12:26 VMOS sshd[767024]: Authentication refused: bad ownership or modes for directory /data/home/user
Mar 21 10:12:26 VMOS sshd[767031]: DBG|operate_common.h|55|MakeNslcdInteraction|action=80003, interaction ok
Mar 21 10:12:31 VMOS sshd[767031]: pam_tsso(sshd:auth): Authentication failure for user from xx.xx.xx.xx

可以看到这句 Authentication refused: bad ownership or modes for directory /data/home/user,即 user文件夹的 modes (权限)是不正确的,拒绝了 SSH 访问。

按照上面第三条所示,修改 /data/home/user的权限,即可完美解决