ssh 免密碼設定失敗原因總結

參考網址: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

本篇發表於 Linux系統。將永久鏈結加入書籤。