1. 程式人生 > >SSH的兩種登錄方式

SSH的兩種登錄方式

nbsp src ssh root 配置 服務 服務端 允許 style 不重復

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的兩種登錄方式