SSH 免密登录故障排查指南

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

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

无法免密登录可能的原因

1. 文件和目录权限问题

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

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

Copy
# 在远程服务器上的目标用户的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，确保一下设置是启用的：

Copy
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

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

Copy
sudo systemctl restart sshd

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

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

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

Copy
755 /data/home/user

日志分析

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

Copy
sudo journalctl -u sshd

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

Copy
-- 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的权限，即可完美解决