免密登錄原理
即在源服務器上先生成一份公鑰和一份密鑰,將公鑰復制到目標服務器,利用命令將公鑰添加至目標服務器的授權列表(authorized_keys)。當有服務器帶着公鑰申請連接服務器時,目標服務器首先在authorized_keys中查找是否存在該公鑰,如果存在則開始進行驗證。首先生成一個隨機字符串,利用對應公鑰進行加密,然后返回給申請連接的服務器,申請連接服務器利用私鑰進行解密,再將字符串返回給目標服務器完成驗證,進行后續操作。
實際操作
具體步驟:
- 生成密鑰對
- 將公鑰上傳至需要登錄的主機的授權列表 (authorized_keys)
- 建立連接時攜帶公鑰
需要登錄的主機:例子中為 crayonsea.top
1. 客戶端生成密鑰對
ssh-keygen -t rsa # 加密方式 rsa
上述命令會在 ~/.ssh/ 下生成 id_rsa id_rsa.pub
2. 上傳公鑰到服務器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@crayonsea.top
在目標服務器上可查看操作結果
cd ~/.ssh
vi authorized_keys
3. 測試免密登錄
ssh root@crayonsea.top
不能登錄的解決方法
實際操作中,可能會出現,在目標服務器的 authorized_keys
中已經寫入公鑰,卻不能免密登錄的情況。可以在兩個地方嘗試進行修改:(需要登錄的服務器上 crayonsea.top
)
1. 修改 /etc/ssh/sshd_config
文件內容
StrictModes no
AuthorizedKeysFile .ssh/authorized_keys
刪除 ~/.ssh/known_hosts
2. 修改 authorized_keys
文件權限
chmod 700 authorized_keys
1 和 2 操作完成后可以重啟一下 ssh,再次嘗試
service sshd restart