帮一师弟解决一个无法通过公钥登录ssh服务器问题, 顺便总结下
现象: test帐号使用key无法登录某ssh服务器, 而同机器下的test2帐号却可以登录, 两个帐号都可以通过密码登录
在排查了所有配置错误的可能后, 初步怀疑test帐号的权限设置出问题
test@client:~$ ls -l ~/.ssh/ -rw------- 1 test test 1675 2010-03-25 15:15 id_rsa
test@server:~$ ls -l ~/.ssh/ -rw-r--r-- 1 test test 396 2010-03-25 15:15 authorized_keys
查看了客户端及服务器端的.ssh目录下的公钥与私钥权限, 可以看出, 并没有问题
私钥必须是600权限, 而公钥至少是644或者更严格的权限, 这都符合, 但依然无法登录
test@server:~$ ls -la ~ | grep -w .ssh drwxr-xr-x 2 test test 4.0K 12-23 16:59 .ssh
查看了服务器端的.ssh目录权限, 是755, 也是没问题的, ssh服务器要求在使用key登录时.ssh目录的权限必须是其他用户不可写。
一开始实在想不明为啥test2帐号使用key可以登录,test帐号使用key无法登录, ssh_config和sshd_config在检查了多遍后确实没有问题, 最后在服务器端对比两个帐号的不同时, 发现了可疑的地方
$ls -l /home/ drwxrwxrwx 3 test test 4096 2009-12-31 17:31 test drwxr-xr-x 6 test2 test2 4096 2010-03-23 15:59 test2
两个帐号的home目录权限不同, test帐号是777, test2帐号是755, 会不会是这里不同导致的? 在服务器端把test目录修改成777后, 解决问题
为啥home目录的权限也会影响ssh的key登录?
ssh服务器的key方式登录对权限要求严格。对于客户端: 私钥必须为600权限或者更严格权限(400), 一旦其他用户可读, 私钥就不起作用(如640), 表现为系统认为不存在私钥
对于服务器端: 要求必须公钥其他用户不可写, 一旦其他用户可写(如660), 就无法用key登录, 表现为:Permission denied (publickey).
同时要求.ssh目录其他用户不可写,一旦其他用户可写(如770), 就无法使用key登录, 表现为:Permission denied (publickey).
但为什么home目录的可写也影响到ssh使用key登录?
我们知道linux下目录也是文件, 目录其他用户可写,代表其他用户可以删除目录里的所有文件或子目录,重命名目录下的所有文件或子目录.
home目录的可写,表示其他用户对.ssh子目录也有改写的权限(删除或重命令),也就导致ssh判断.ssh为其他用户可写, 拒绝使用key登录
近期评论