今天我在设置ssh密钥登录的时候,发现这个奇怪的情况,我将我的id_rsa.pub密钥内容拷贝到远程linux主机的A用户的.ssh下的authorized_keys(这个文件我手动建立的)下,但是再次登录时,发现还需要输入密码,额?这不科学!然后我查看了一下远程linux主机的sshd日志 /var/log/secure 发现了如下日志输出内容:
Authentication refused: bad ownership or modes for file /home/sysadmin/.ssh/authorized_keys
意思是我的authorized_keys权限问题,我查看一下该文件权限
[root@Zenoss .ssh]# ll authorized_keys
-rw-rw-r-- 1 sysadmin sysadmin 791 8月 10 09:01 authorized_keys
随后我查看了一下其它服务器通过ssh-copy-id 命令拷贝生成的authorized_keys文件权限
[root@Zenoss .ssh]# ll authorized_keys
-rw------- 1 sysadmin sysadmin 393 8月 10 09:46 authorized_keys
果然权限是不同的,我把authorized_keys文件权限改到600,之后就可以正常密钥登录了。
为了搞清楚这是原因,我查阅了一下官方的文档 http://man.openbsd.org/sshd_config 发现了一个这样的配置参数
StrictModes
Specifies whether sshd(8) should check file modes and ownership of the user’s files and
home directory before accepting login. This is normally desirable because novices
sometimes accidentally leave their directory or files world-writable. The default
is “yes”. Note that this does not apply to ChrootDirectory, whose permissions and
ownership are checked unconditionally.
意思是:sshd在接受登录前检查会检查用户的家目录和文件权限模式,可以通过设置no来关闭检查,但为了安全起见,建议不要更改此选项,配置好家目录和文件权限才是正解!
正常的权限如下:
[root@Zenoss home]# ls -ld sysadmin/
drwx------. 7 sysadmin sysadmin 4096 8月 10 09:46 sysadmin/
[root@Zenoss sysadmin]# ls -ld .ssh/
drwx------. 2 sysadmin sysadmin 4096 8月 10 09:46 .ssh/
[root@Zenoss .ssh]# ls -l authorized_keys
-rw------- 1 sysadmin sysadmin 393 8月 10 09:46 authorized_keys
正常通过ssh-copy-id 命令自动生成的authorized_keys 就是600,就不会出现上述问题了。