在新安装的centos上建立 /root/.ssh目录,chmod为700, 这个目录中建立 authorized_keys文件,复制公钥进去,设置权限为600,从其他机器使用public key进行ssh登陆,这件事已经做过无数次了。
这次就总是无法登陆成功,退化为使用password,可以登陆成功。
对比了 /etc/ssh/sshd_config文件,和其他服务器没有任何区别。
原来是selinux引起的。 在其他可以正常登陆的服务器上, /etc/selinux/config中, selinux=disabled。而在这次出问题的centos上,则是selinux=enforcing。关于这一点可以使用getenforce命令查看。
selinux本身不一定会引起问题。 问题是新建立的.ssh目录的security context不正确。
解决办法1: 修正security context。
先看看无法ssh登陆时的样子:
[root@test ~]# ls -alZd .ssh/ drwx------. root root unconfined_u:object_r:admin_home_t:s0 .ssh/
修正:
[root@test ~]# restorecon -r -vv /root/.ssh restorecon reset /root/.ssh context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0 restorecon reset /root/.ssh/authorized_keys context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0
可以看到发生了变化:
[root@test ~]# ls -alZd .ssh/ drwx------. root root unconfined_u:object_r:ssh_home_t:s0 .ssh/
这样再ssh,成功。
方法2: 关闭selinux。修改 /etc/selinux/config,设置为disabled。
找了好久终于搜索到了,解决了我好几天的苦恼,博主谢谢啊!!!!!