SSH的兩種登錄方式
ssh客戶端使用的是Xshell,windows環境。
第一種方式,用戶名密碼方式
原理如下:
- 客戶端發起ssh請求之後,服務器把自己的公鑰傳給客戶端
- 客戶端輸入服務器密碼通過公鑰加密之後傳給服務器
- 服務器根據自己的私鑰解密登錄密碼,如果正確那麽就讓客戶端登錄
Xshell操作如下:
1.
2.
3.
第二種方式基於秘鑰的登錄方式
- 首先在客戶端生成一對密鑰(ssh-keygen);
- 並將客戶端的公鑰ssh-copy-id 拷貝到服務端;
- 當客戶端再次發送一個連接請求,包括ip、用戶名;
- 服務端得到客戶端的請求後,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:qwer;
- 服務端將使用客戶端拷貝過來的公鑰進行加密,然後發送給客戶端;
- 得到服務端發來的消息後,客戶端會使用私鑰進行解密,然後將解密後的字符串發送給服務端;
- 服務端接受到客戶端發來的字符串後,跟之前的字符串進行對比,如果一致,就允許免密碼登錄。
現在拿服務器A(192.168.204.192)訪問服務器B(192.168.204.100)舉例:
Xshell操作如下:
1.在服務器A端生成RSA的公鑰和私鑰,通過 ssh-keygen -t rsa 命令
如下圖所示id_rsa為私鑰,id_rsa.pub為公鑰。
2.將公鑰放到服務器B中,一般是在用戶根目錄下的.ssh/目錄下,通過命令 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
在服務器B端的.ssh/目錄下有authorized_keys+know_hosts,這兩個文件。如下:
authorized_keys:存放遠程免密登錄的公鑰,主要通過這個文件記錄多臺機器的公鑰,上面提到的A端在生成自己的公私鑰之後,將公鑰追加到服務器B端的authorized_keys文件後面。如下:
know_hosts : 已知的主機公鑰清單,這個作為A端和B端都會自動生成這個文件,每次和遠端的服務器進行一次免密碼ssh連接之後就會在這個文件的最後追加對方主機的信息(不重復)。如下:
到這裏配置就設置結束了。
現在服務器A訪問服務器B,直接通過命令 ssh [email protected]
如下:
因為設置的是單向的,A到B,若現在服務器B要訪問A,是需要輸入密碼的,如下:
如果嫌每次連接的時候很麻煩
我們可以利用 ssh 的用戶配置文件 config 管理 多個免密碼ssh 會話。ssh 的用戶配置文件是放在當前用戶根目錄下的 .ssh 文件夾裏(~/.ssh/config,不存在則新創建一個),其配置寫法如下:
Host 別名 HostName 主機名 Port 端口 User 用戶名 IdentityFile 密鑰文件的路徑
如下圖實例:
配置完後我們就可以通過這種方式登錄了:‘
SSH的兩種登錄方式