解决ssh无密码登陆不成功的问题

把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步。解决掉这两个报错后就可无密码登陆了。

相关文章
相关标签/搜索