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