把ssh设置为无密码登陆很简单,只需两步:安全
一、在本地建立公钥和私钥:ssh
ssh-keygen -t rsa
二、而后把公钥上传到远程机器上:this
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.41.132
正常状况下经这两步设置就可无密码登陆了:spa
ssh 192.168.41.132
但是今碰到的问题是仍要输入密码,网上找了找资料,有说要 restorecon ,也有说要 chmod ,最终在 /var/log/audit/audit.log 中发现了问题:rest
# cat /var/log/audit/audit.log ... type=AVC msg=audit(1417198093.916:14807): avc: denied { search } for pid=1977 comm="sshd" name="/" dev=vdb1 ino=2 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir ...
这里报了 avc: denied { search } 的错误,属于SELinux安全性问题,解决该问题的方法是:code
一、把 /var/log/audit/audit.log 文件中报错的行拷贝到临时文件 /tmp/error.txt :blog
# grep "avc: denied { search }" /var/log/audit/audit.log > /tmp/error.txt
二、执行下面的命令让系统本身找缘由:get
# audit2why -i /tmp/error.txt type=AVC msg=audit(1417198093.916:14807): avc: denied { search } for pid=1977 comm="sshd" name="/" dev=vdb1 ino=2 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access.
三、按上面命令的输出说明,执行:it
# audit2allow -i /tmp/error.txt -M local ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i local.pp
四、按上面命令的输出说明,执行:class
semodule -i local.pp
这样就解决了 avc: denied { search } 问题。
解决掉这个问题后,再执行ssh登陆仍然须要输入密码。为此又查看了 /var/log/audit/audit.log 文件尾部,新发现了 avc: denied { getattr } 报错,解决方法同上面的1-4步。解决掉这两个报错后就可无密码登陆了。