1、說明:
1.1、known_hosts是什麼?
ssh會把你每個你訪問過計算機的公鑰(public key)都記錄在~/.ssh/known_hosts。當下次訪問相同計算機時,OpenSSH會覈對公鑰。如果公鑰不同,OpenSSH會發出警告, 避免你受到DNS Hijack之類的攻擊。
可能出現問題的原因:一臺主機上有多個Linux系統,會經常切換,那麼這些系統使用同一ip,登錄過一次後就會把ssh信息記錄在本地的~/.ssh/known_hsots文件中,切換該系統後再用ssh訪問這臺主機就會出現衝突警告,需要手動刪除修改known_hsots裏面的內容。
有以下兩個解決方案:
1. 手動刪除修改known_hsots裏面的內容;
2. 修改配置文件“~/.ssh/config”,加上這兩行,重啓服務器。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
優缺點:
1. 需要每次手動刪除文件內容,一些自動化腳本的無法運行(在SSH登陸時失敗),但是安全性高;
2. SSH登陸時會忽略known_hsots的訪問,但是安全性低;
2. 製作密鑰對
首先在服務器上製作密鑰對。首先用密碼登錄到你打算使用密鑰登錄的賬戶,然後執行以下命令:
[root@host ~]$ ssh-keygen <== 建立密鑰對
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 輸入密鑰鎖碼,或直接按 Enter 留空
Enter same passphrase again: <== 再輸入一遍密鑰鎖碼
Your identification has been saved in /root/.ssh/id_rsa. <== 私鑰
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公鑰
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host
密鑰鎖碼在使用私鑰時必須輸入,這樣就可以保護私鑰不被盜用。當然,也可以留空,實現無密碼登錄。
現在,在 root 用戶的家目錄中生成了一個 .ssh 的隱藏目錄,內含兩個密鑰文件。id_rsa 爲私鑰,id_rsa.pub 爲公鑰。
3. 在服務器上安裝公鑰
鍵入以下命令,在服務器上安裝公鑰:
[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys
如此便完成了公鑰的安裝。爲了確保連接成功,請保證以下文件權限正確:
[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
4. 設置 SSH,打開密鑰登錄功能
編輯 /etc/ssh/sshd_config 文件,進行如下設置:
RSAAuthentication yes
PubkeyAuthentication yes
另外,請留意 root 用戶能否通過 SSH 登錄:
PermitRootLogin yes
當你完成全部設置,並以密鑰方式登錄成功後,再禁用密碼登錄:
PasswordAuthentication no
最後,重啓 SSH 服務:
[root@host .ssh]$ service sshd restart