天天看點

SSH實作遠端免密登入1.用戶端生成一對秘鑰(公鑰私鑰)2.拷貝公鑰到伺服器3.用戶端再發送連接配接請求(包括使用者名、IP)禁用密碼登陸

1.用戶端生成一對秘鑰(公鑰私鑰)

$ ssh-keygen -t rsa  -C "xxx"           

參數說明:

  • -t 加密算法類型,這裡是使用rsa算法 如果沒有指定則預設生成用于SSH-2的RSA密鑰。這裡使用的是rsa。
  • -C來指定所指定的注釋,可以友善使用者辨別這個密鑰,指出密鑰的用途或其他有用的資訊,如自己的郵箱或者其他資訊都行。

當然,如果不想要這些可以直接輸入(一般也是這麼做的)下面指令:

ssh-keygen           

之後會在使用者的根目錄下的.ssh的檔案夾生成私鑰id_rsa和公鑰id_rsa.pub。本地的.ssh的檔案夾存在以下幾個檔案:

  • id_rsa : 執行指令後生成的私鑰檔案
  • id_rsa.pub : 執行指令後生成的公鑰檔案
  • know_hosts : 已知的主機公鑰清單//ssh指令遠端連接配接不同伺服器時可以選擇接受到不同的公鑰,會将這些主機的公鑰都儲存在這裡。

注意:執行上面指令後,它要求你輸入加密的一些附加參數,不用管,一般預設就好,一直回車即可生成秘鑰。

2.拷貝公鑰到伺服器

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]           

user代表Linux使用者,xxx.xxx.xxx.xxx代表遠端主機位址,下面為例子:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]           

注意:此時需要登入到[email protected]伺服器的密碼(沒錯,這裡又用到了前面ssh密碼登入裡講過的步驟),輸入正确後即可在伺服器生成公鑰,該公鑰儲存在伺服器家目錄的.ssh的authorized_keys中(存放遠端免密登入的公鑰,主要通過這個檔案記錄多台機器的公鑰),然後退出即可。

3.用戶端再發送連接配接請求(包括使用者名、IP)

ssh [email protected]           

伺服器得到用戶端的請求後,就會到authorized_keys中查找,如果有響應的使用者名和IP,就會随機生成一個字元串;

伺服器将使用用戶端拷貝過來的公鑰将随機生成的字元串進行加密,然後發送給用戶端;

用戶端會使用私鑰解密伺服器發送來的消息,然後将解密後的字元串發送給伺服器;

伺服器接收到用戶端發送來的字元串後,跟之前的字元串進行對比,如果一緻,就允許免密碼登入。

禁用密碼登陸

既然開啟了SSH免密登陸,就可以把密碼登陸關閉了。這樣既可以快速連接配接遠端伺服器,也可以防止黑客。

修改/etc/ssh/sshd_config檔案:

# vim /etc/ssh/sshd_config           

将其中3行指令更改,前面若帶#,就删掉,作用是可以用密鑰登陸伺服器:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys           
PasswordAuthentication no           
systemctl restart sshd.service