參考網址:itread
ssh 免密碼設定失敗原因總結。
先複習一下設定ssh免密碼操作的步驟:
進入主目錄
cd
生成公鑰
ssh-keygen -t rsa -P '' (注:最後是二個單引號,表示不設定密碼)
然後分發公鑰到目標機器
ssh-copy-id -i ~/.ssh/id_rsa.pub 使用者名稱@對方機器IP (注意不要忘記了引數-i)
注:ssh-copy-id -i 是最簡單的辦法,如果不用這個,就得分二個步驟:
a) 先scp 將本機的id_rsa.pub複製到對方機器的.ssh目錄下
b) 在對方機器上執行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 匯入公鑰
上面的操作完成後,就可以用 ssh 對方機器IP 來測試了,順利的話,應該不會提示輸入密碼。
如果失敗,有可能是以下原因:
1、許可權問題
.ssh目錄,以及/home/當前使用者 需要700許可權,參考以下操作調整
sudo chmod 700 ~/.ssh
sudo chmod 700 /home/當前使用者
.ssh目錄下的authorized_keys檔案需要600或644許可權,參考以下操作調整
sudo chmod 600 ~/.ssh/authorized_keys
2、StrictModes問題
編輯
sudo vi /etc/ssh/sshd_config
找到
#StrictModes yes
改成
StrictModes no
如果還不行,可以用ssh -vvv 目標機器ip 檢視詳情,根據輸出內容具體問題具體分析了
【另一個參考網站】matt-u
StrictModes no #修改为no,默认为yes.如果不修改用key登陆是出现server refused our key(如果StrictModes为yes必需保证存放公钥的文件夹的拥有与登陆用户名是相同的.“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。)
之后重新启动ssh服务:/etc/init.d/ssh restart
【結論】
server端:120.116.xxx.xxx
StrictModes no
client端下指令時 ssh sa@120.116.xxx.xxx -p808
~/.ssh/authorized_keys <== 檔案為sa的檔案(即使sa為0:0位置仍是/home/sa/.ssh)
client端:163.26.xxx.xxx
複製公鑰到對方主機
ssh-copy-id -i ~/.ssh/id_rsa.pub sa@對方機器IP -p808 (注意不要忘記了引數-i)
下指令時 ssh sa@120.116.xxx.xxx -p808
因 sa為(0:0)所以會去讀 root/.ssh/id_rsa 及 id_rsa.pub
所以要把/home/sa/.ssh 的檔案複製到/root/.ssh
使用習慣:
client 端用root權限跑,因為還需設定crontab
server用sa權限認證,比較安全。
再次總結
client 端用root權限跑,所以先切換成root身分,再下ssh-copy-id -i ~/.ssh/id_rsa.pub sa@對方機器IP -p808 (注意不要忘記了引數-i)
會把client端root下.ssh/id_rsa.pub檔附加到server端sa的主目錄下.ssh/authorized_keys