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