古詩詞大全網 - 個性簽名 - SSH詳解-3.密鑰登陸

SSH詳解-3.密鑰登陸

SSH詳解-1.ssh基礎知識

SSH詳解-2.ssh基本用法

SSH詳解-3.密鑰登陸

SSH詳解-4.多個ssh公鑰

在上壹篇中我們了解到了ssh基本用法,ssh通過密碼進行登錄。密碼登錄存在很多問題。密碼太簡單,又不安全。密碼太復雜,不容易記,而且每次登錄都要輸入很麻煩。於是就有了密鑰登陸。

什麽是密鑰(key)?

ssh密鑰登錄采用的是 非對稱加密 。

非對稱密鑰加密系統,又稱公鑰密鑰加密。它需要使用不同的密鑰來分別完成加密和解密操作,壹個公開發布,即公開密鑰(public key)和,另壹個由用戶自己秘密保存,即私用密鑰(private key)。

如果數據使用公鑰加密,那麽只有使用對應的私鑰才能解密,其他密鑰都不行;反過來,如果使用私鑰加密(這個過程壹般稱為“簽名”),也只有使用對應的公鑰解密。

了解完密鑰後,接下來看看密鑰登錄的過程,SSH 密鑰登錄分為以下的步驟。

第零步,準備步驟客戶端通過 ssh-keygen 生成自己的公鑰和私鑰,並將公鑰放入遠程服務器的指定位置。

第壹步,用戶客戶端向服務器發起SSH登錄的請求。

第二步,服務器收到用戶SSH登錄的請求,服務器生成壹些隨機數據發送給客戶端。

第三步,客戶端接收到服務器發過來的數據,客戶端使用私鑰對數據進行簽名後再返回給服務器。

第四步,服務器收到客戶端加密後的數據,使用對應公鑰進行解密。然後判斷解密後的數據是否與原始數據壹致,如果壹致就允許用戶登錄。

ssh-keygen 是OpenSSH提供的壹個命令行工具,用於生成密鑰登錄所需的公鑰和私鑰。

在上面的例子中,我使用了-t參數來指定加密算法,壹遍會選擇rsa或者dsa。

第壹個問題,問我要保存在哪?(直接Enter默認會保存在~/.ssh/id_rsa中)因為我之前已經生成過密鑰了,我就保存在tenxun裏面。

第二個問題,詢問是否要為私鑰文件設定密碼保護(passphrase)。這樣的話,即使入侵者拿到私鑰,還是需要破解密碼。如果為了方便,不想設定密碼保護,可以直接按回車鍵,密碼就會為空。

最後,就會生成私鑰和公鑰,屏幕上還會給出公鑰的指紋,以及當前的用戶名和主機名作為註釋,用來識別密鑰的來源。

從上面的公鑰中我們可以看到末尾的公鑰註釋 23696@DESKTOP-GKRBCVI

公鑰註釋可以用來識別不同的公鑰,表示這是哪臺主機(DESKTOP-GKRBCVI)的哪個用戶(username)的公鑰。

註意 ,公鑰只有壹行。因為它太長了,顯示的時候可能自動換行了。

OpenSSH 規定,用戶公鑰保存在服務器的 ~/.ssh/authorized_keys 文件。妳要以哪個用戶的身份登錄到服務器,密鑰就必須保存在該用戶主目錄的~/.ssh/authorized_keys文件。只要把公鑰添加到這個文件之中,就相當於公鑰上傳到服務器了。每個公鑰占據壹行。如果該文件不存在,可以手動創建。

-i 指定要上傳公鑰(公鑰文件可以不指定路徑和 .pub 後綴名),user是所要登錄的用戶名,hostname是主機名,這兩個參數與ssh 登錄命令是壹致。

特別註意 ,不是把公鑰上傳上去就行了,還需要把 authorized_keys 文件的權限要設為644,即只有文件所有者才能寫。如果權限設置不對,SSH服務器可能會拒絕讀取該文件,導致密鑰登錄失效,登錄的時候還需要輸入密碼。

提到輸入密碼,如果再生成公鑰和私鑰的時候設置了密碼,使用密鑰登錄的時候也需要輸入私鑰的密碼,這樣可以防止他人非法竊取了私鑰。

私鑰設置了密碼以後,每次使用都必須輸入私鑰密碼,這個問題可以使用 ssh-agent 命令解決。

百度百科-密鑰

Git - 生成 SSH 公鑰 (git-scm.com)

ssh(1) - OpenBSD manual pages