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