SSH實現遠程免密登錄

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,即禁用密碼登陸:

PasswordAuthentication no

重啓sshd服務使操作生效:

systemctl restart sshd.service

注:本地密鑰請保存好,遠程服務器authorized_keys中公鑰也別亂修改。
參考資料
https://zhuanlan.zhihu.com/p/73944703

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章