解決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步。解決掉這兩個報錯後就可無密碼登陸了。

相關文章
相關標籤/搜索