SSH實現遠程免密登陸

1.客戶端生成一對祕鑰(公鑰私鑰)

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

參數說明: 算法

  • -t 加密算法類型,這裏是使用rsa算法 若是沒有指定則默認生成用於SSH-2的RSA密鑰。這裏使用的是rsa。
  • -C來指定所指定的註釋,能夠方便用戶標識這個密鑰,指出密鑰的用途或其餘有用的信息,如本身的郵箱或者其餘信息都行。

固然,若是不想要這些能夠直接輸入(通常也是這麼作的)下面命令:vim

ssh-keygen

以後會在用戶的根目錄下的.ssh的文件夾生成私鑰id_rsa和公鑰id_rsa.pub。本地的.ssh的文件夾存在如下幾個文件:服務器

  • id_rsa : 執行命令後生成的私鑰文件
  • id_rsa.pub : 執行命令後生成的公鑰文件
  • know_hosts : 已知的主機公鑰清單//ssh命令遠程鏈接不一樣服務器時能夠選擇接受到不一樣的公鑰,會將這些主機的公鑰都保存在這裏。

注意:執行上面命令後,它要求你輸入加密的一些附加參數,不用管,通常默認就好,一直回車便可生成祕鑰。 ssh

2.拷貝公鑰到服務器

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@xxx.xxx.xxx.xxx

user表明Linux用戶,xxx.xxx.xxx.xxx表明遠程主機地址,下面爲例子:ide

$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.2.128

注意:此時須要登陸到user@xxx.xxx.xxx.xxx服務器的密碼(沒錯,這裏又用到了前面ssh密碼登陸裏講過的步驟),輸入正確後便可在服務器生成公鑰,該公鑰保存在服務器家目錄的.ssh的authorized_keys中(存放遠程免密登陸的公鑰,主要經過這個文件記錄多臺機器的公鑰),而後退出便可。 加密

3.客戶端再發送鏈接請求(包括用戶名、IP)

ssh root@xxx.xxx.xxx.xxx

服務器獲得客戶端的請求後,就會到authorized_keys中查找,若是有響應的用戶名和IP,就會隨機生成一個字符串;
服務器將使用客戶端拷貝過來的公鑰將隨機生成的字符串進行加密,而後發送給客戶端;
客戶端會使用私鑰解密服務器發送來的消息,而後將解密後的字符串發送給服務器;
服務器接收到客戶端發送來的字符串後,跟以前的字符串進行對比,若是一致,就容許免密碼登陸。rest

禁用密碼登錄

既然開啓了SSH免密登錄,就能夠把密碼登錄關閉了。這樣既能夠快速鏈接遠程服務器,也能夠防止***。
修改/etc/ssh/sshd_config文件:code

# vim /etc/ssh/sshd_config

將其中3行命令更改,前面若帶#,就刪掉,做用是能夠用密鑰登錄服務器:字符串

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

而後在修改其中PasswordAuthentication屬性爲no,即禁用密碼登錄:get

PasswordAuthentication no

重啓sshd服務使操做生效:

systemctl restart sshd.service

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

相關文章
相關標籤/搜索