免密說明
通常情況下,我們ssh到其他服務器需要知道服務器的用戶名和密碼。對于需要經常登錄的服務器每次都輸入密碼比較麻煩,因此我們可以在兩臺服務器上做免密登錄,即在A服務器可以免密登錄B服務器。
在A服務器上登錄B服務器時,B服務器需要驗證A服務器是否有登錄權限,通常是通過用戶名密碼進行校驗,如果沒有用戶名密碼則通過密鑰進行校驗。因此免密登錄其實就是把B服務器的公鑰拷貝到A服務器,這樣A和B服務器之間就能進行身份驗證。
A到B免密認證過程
- A服務器生成公鑰和私鑰
- 把A服務器的公鑰發送給B服務器
- A服務器登錄B服務器時攜帶用戶信息,B服務器根據用戶名匹配到公鑰,生成隨機串并用公鑰加密傳給A服務器
- A服務器用自己的私鑰進行解密,把解密后的隨機串發送給B服務器
- B服務器驗證隨機串是否正確,如果正確則放行
生成過程
在A服務器執行 ssh-keygen 生成公私鑰,執行命令后全部回車即可。執行成功后可以在/root/.ssh下看到下面的文件
id_rsa :私鑰
id_rsa.pub:公鑰
在A服務器執行 ssh-copy-id -f /root/.ssh/id_rsa.pub root@B,輸入B服務器的用戶名密碼。執行成功后可以在B服務器的 /root/.ssh/authorized_keys 看到A服務器生成的公鑰。
之后就可以直接在A服務器上免密登錄B服務器了。
注意事項
免密登錄是當前用戶和目標服務器進行驗證,而且每個用戶都有自己的公私鑰,文件都保存在各自用戶的.ssh下,因此需要注意做免密登錄時使用的用戶。
即如果在root用戶下做了免密,那么用root用戶是可以免密登錄到目標服務器的,但是用其他用戶則登錄失敗。
如果用 apache sshd 則會報 No more authentication methods available 的錯誤,具體如下:
其他
也可以直接把自己的私鑰(id_rsa)拷貝到子用戶的 /home/user/.ssh 下面,這樣也能實現子用戶免密登錄目標服務器。