1、SSH初次交換公鑰
- 客戶端發起鏈接請求
- 服務端返回自己的公鑰,以及一個會話ID(這一步客戶端得到服務端公鑰)
- 客戶端生成密鑰對
- 客戶端用自己的公鑰異或會話ID,計算出一個值Res,並用服務端的公鑰加密
- 客戶端發送加密后的值到服務端,服務端用私鑰解密,得到Res
- 服務端用解密后的值Res異或會話ID,計算出客戶端的公鑰(這一步服務端得到客戶端公鑰)
- 最終:雙方各自持有三個秘鑰,分別為自己的一對公、私鑰,以及對方的公鑰,之后的所有通訊都會被加密
2、SSH加密原理
3、SSH服務登錄的常用驗證方式
- 用戶/口令
- 基於密鑰
基於用戶和口令登錄驗證
- 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
- 用戶會根據服務器發來的公鑰對密碼進行加密
- 加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功
基於密鑰的登錄方式
- 首先在客戶端生成一對密鑰(ssh-keygen)
- 並將客戶端的公鑰ssh-copy-id 拷貝到服務端
- 當客戶端再次發送一個連接請求,包括ip、用戶名
- 服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生
成一個字符串,例如:magedu - 服務端將使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端
- 得到服務端發來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發送給服務端
- 服務端接受到客戶端發來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄
分兩步實現:
1、現在client端生成自己的密鑰對(公私鑰)
2、把客戶端公鑰手動添加到服務端
ssh_client#ssh-keygen
默認路徑在/root/.ssh/id_rsa 默認是rsa加密方式
提示你是否添加密碼。
ssh_client#ssh-copy-d -i ./ssh/id_rsa.pub 10.0.0.7 //上傳到服務端