Linux 伺服器上的 SSH
SSH,也稱為安全外殼協定,是一種可用於與伺服器連接和通訊的協定。您可以連接到您的 Linux 伺服器,以使用此加密協定進行終端機工作階段。如果您使用的是 OpenSSH 伺服器,身分驗證程序主要有兩種不同的方式。第一種是標準的密碼驗證。在這裡,您只需使用您的使用者名稱和密碼憑證即可存取您的帳戶。另一種方法是將您的 Linux 伺服器設定為使用基於 SSH 金鑰的身分驗證。
在本指南中,我們將著重於如何設定您的 Linux 伺服器,以將 SSH 金鑰作為主要的身分驗證方式。我們也將討論為什麼與通常的密碼保護機制相比,人們通常更偏好使用 SSH 金鑰。
什麼是 SSH 金鑰?
SSH 金鑰類似於您用來登入伺服器帳戶的憑證。您不需要輸入使用者名稱和密碼,而是使用 SSH 金鑰對,這也是一種存取憑證。雖然這些金鑰是加密的,但您必須將它們視為身分驗證憑證,因為這就是它們的用途。
典型的 SSH 金鑰包含兩個部分:授權金鑰和識別金鑰。授權金鑰是公鑰,它與您的私有識別金鑰結合使用,以授予您帳戶存取權限。公鑰位於您想要透過 SSH 登入的遠端伺服器上,並保留在與您的使用者帳戶關聯的 ~/.ssh/authorized_keys 檔案中。識別金鑰用於驗證您作為正確使用者的身分,以確保只有授權人員才能存取該帳戶。這些金鑰統稱為使用者金鑰,因為它們用於驗證使用者的身分。一旦伺服器能夠驗證這兩個金鑰,就會啟動一個 shell 工作階段以執行您的指令。
您還有主機金鑰和工作階段金鑰。該協定使用主機金鑰來驗證本機電腦、系統或伺服器。工作階段金鑰有助於對連線上的資料流進行加密。這使得您的工作階段和相應的活動更加安全。
SSH 金鑰優於密碼保護
為什麼基於 SSH 金鑰的身分驗證比密碼保護更可取,主要原因在於後者可能會讓您容易受到網路攻擊。大多數人不會使用極其複雜的密碼,以便在需要登入時能夠記住它們。因此,這就產生了安全漏洞。許多攻擊者會使用暴力破解來破解相對簡單的密碼並入侵帳戶。由於自動化和先進的駭客技術,這在如今變得特別容易。
另一方面,SSH 金鑰提供了一種更安全的方式來存取您的帳戶。正如我們之前提到的,此方法使用公鑰和私鑰來驗證用戶端的身分。雖然您可以與任何人分享公鑰,但您需要對私鑰保密。當配對在一起時,公鑰會解密私鑰以驗證您的身分。此外,您還可以透過在金鑰對之上添加密碼片語來增加一層保護。我們將在指南的後面詳細討論密碼片語。然而,即使沒有密碼片語,您的私有 SSH 金鑰在本機電腦上也是極其安全的。網路永遠無法直接存取該金鑰,它位於受限制的目錄中,並輔以受限制的權限。
產生 SSH 金鑰
要產生您的 SSH 金鑰對,您需要瀏覽 OpenSSH 工具套件並找到 ssh-keygen。這是一個特殊的公用程式,可讓您產生大約 2048 位元的 SSH 金鑰對。首先執行以下指令:
|
1 |
ssh-keygen |
這將提示以下訊息:
|
1 2 |
正在產生 公鑰/私鑰 rsa 金鑰 對. 輸入 檔案 在 其中 以 儲存 該 金鑰 (/home/username/.ssh/id_rsa): |
該訊息將生成一個名為 id_rsa 的私鑰和一個名為 id_rsa.pub 的公鑰。此時,您可以選擇要將金鑰存放在何處。我們建議按 Enter 鍵保留在預設位置。保留在預設位置可確保每當您使用該系統登入時,伺服器都會自動定位並驗證金鑰。預設位置是家目錄中的 ~/.ssh 目錄。如果您想選擇其他位置,請輸入該路徑。
覆寫舊的 SSH 金鑰
請注意,您的系統上一次只能有一個 SSH 金鑰對。這意味著如果您之前已在系統上生成並儲存了金鑰對,您將看到以下訊息:
|
1 2 |
/home/username/.ssh/id_rsa 已經 存在. 覆寫 (y/n)? |
要繼續建立並儲存新的 SSH 金鑰對,您必須刪除現有的金鑰對。請記住:如果您覆寫已儲存在磁碟上的金鑰,您將無法再將其用於身分驗證。這是一個不可逆的過程,因此請確保您完全確定要覆寫舊的金鑰對。
設定密碼短語
在目錄中設定好金鑰後,系統會詢問您是否要提供密碼短語:
|
1 2 3 |
已建立 目錄 '/home/username/.ssh'. 輸入 密碼短語 (留空 以 無 密碼短語): 輸入 相同 密碼短語 再次: |
密碼短語是選填的,您可以選擇跳過它。然而,它透過在磁碟上加密您的私鑰,為您的私鑰增加了一層額外的安全性。如果您選擇使用密碼短語,則每次嘗試使用此 SSH 金鑰對登入時,都必須正確輸入它:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
您的 身分識別 已 被 儲存 於 /home/username/.ssh/id_rsa. 您的 公開 金鑰 已 被 儲存 於 /home/username/.ssh/id_rsa.pub. 此 金鑰 指紋 為: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host 此 金鑰'的 隨機藝術 圖像 為: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+ |
最後,您現在應該已經擁有可以用於驗證用戶端的 SSH 金鑰。
將您的 SSH 金鑰嵌入您的伺服器帳戶
在使用金鑰進行身分驗證之前,您需要將公鑰嵌入遠端 Linux 伺服器中。接下來,我們將向您展示在建立 CloudSigma 伺服器時如何執行此操作。首先,您需要找到您的 SSH 公鑰,以便複製並貼上它。如果您已使用上述方法生成 SSH 金鑰對,可以透過輸入以下內容來找到公鑰:
|
1 |
cat ~/.ssh/id_rsa.pub |
這將使 SSH 公鑰像這樣彈出:
|
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNqqi1mHLnryb1FdbePrSZQdmXRZxGZbo0gTfglysq6KMNUNY2VhzmYN9JYW39yNtjhVxqfW6ewc+eHiL+IRRM1P5ecDAaL3V0ou6ecSurU+t9DR4114mzNJ5SqNxMgiJzbXdhR+j55GjfXdk0FyzxM3a5qpVcGZEXiAzGzhHytUV51+YGnuLGaZ37nebh3UlYC+KJev4MYIVww0tWmY+9GniRSQlgLLUQZ+FcBUjaqhwqVqsHe4F/woW1IHe7mfm63GXyBavVc+llrEzRbMO111MogZUcoWDI9w7UIm8ZOTnhJsk7jhJzG2GpSXZHmly/a/buFaaFnmfZ4MYPkgJD username@example.com |
複製此值以便稍後使用。使用 CloudSigma 建立伺服器時,您可以在選擇伺服器大小和作業系統映像檔後,選擇加入 SSH 金鑰:

按一下「新增」(Add)並貼上您複製的內容,以將 SSH 金鑰嵌入您的伺服器中。如此一來,每次啟動伺服器時,它就已經包含植入的 SSH 金鑰。
將公鑰複製到現有伺服器
雖然上述方法適用於建立新伺服器時,但有沒有可能將 SSH 金鑰嵌入現有的伺服器中?答案是肯定的,而且有多種方法可以實現,具體取決於您手頭有哪些工具。
使用 SSH-Copy-ID
這是複製公鑰最簡單、最輕鬆的方法。您只需要在標準 OpenSSH 套件中找到的 ssh-copy-id 工具程式。但在使用此方法之前,請確保您的伺服器已啟用密碼驗證。要複製金鑰,您將套用 ssh-copy-id 語法,然後輸入您要連線的遠端主機。您還必須指定要連線的帳戶。您需要擁有該帳戶的密碼存取權限,以便將金鑰複製到正確的位置。該指令應該像這樣:
|
1 |
ssh-copy-id username@remote_host |
這可能會導致螢幕上彈出如下訊息:
|
1 2 3 |
此 真實性 的 主機 '111.111.11.111 (111.111.11.111)' 無法't 被 建立. ECDSA 金鑰 指紋 為 fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 您 確定 要 繼續 連線 嗎 繼續 連線 (是/否)? 是 |
這通常發生在您第一次連線到該特定遠端主機時。這僅表示電腦無法識別該主機。您只需輸入「yes」並按 Enter 鍵即可。完成此操作後,該工具將掃描帳戶以尋找您的公鑰。找到後,它會要求您輸入帳戶密碼:
|
1 2 3 |
/usr/bin/ssh-copy-id: INFO: 正在嘗試 以 登入 入 使用 此 新 金鑰(s), 以 篩選 掉 任何 已 被 已經 安裝的 /usr/bin/ssh-copy-id: INFO: 1 金鑰(s) 仍需 被 be 安裝 -- 如果 您 被 提示 現在 這 是 為了 安裝 此 新 金鑰 username@111.111.11.111's 密碼: |
接下來,您可以輸入密碼。連線到您的帳戶後,該工具將複製 ~/.ssh/id_rsa.pub 金鑰的內容,並將其貼到遠端帳戶上 ~/.ssh 目錄下的 authorized_keys 中。然後您將看到以下訊息:
|
1 2 3 |
數量 的 金鑰(s) 已新增: 1 現在 嘗試 登入 到 此 機器, 使用: "ssh 'username@111.111.11.111'" 並 檢查 以 確保 that 只有 此 金鑰(s) 您 想要的 被 新增. |
這意味著您已成功將公鑰複製到現有的遠端伺服器上。
使用 SSH
這是一種將公鑰複製到伺服器上的傳統方法。如果您無法使用 ssh-copy-id 工具,最好使用此方法。同樣地,您需要擁有該帳戶的密碼存取權限。您實質上是在電腦上將公鑰內容作為輸出,並透過兩者之間建立的 SSH 連線將其傳輸到遠端伺服器。您為此目的使用的指令應該如下:
|
1 |
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" |
如您所見,我們已指定應將金鑰放置在伺服器上 ~/.ssh 目錄中的 authorized_keys 檔案中。使用 >> 符號還能確保我們是新增金鑰,而不是覆寫它們。執行該命令後,您可能會看到以下訊息:
|
1 2 3 |
此 真實性 的 主機 '111.111.11.111 (111.111.11.111)' 無法't 被 建立. ECDSA 金鑰 指紋 為 fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 是否 您 確定 您 想要 要 繼續 連線 (是/否)? 是 |
與前一條訊息類似,這表示電腦無法識別遠端主機。輸入「yes」並按 Enter 鍵繼續。現在,您將輸入帳戶密碼:
|
1 |
username@111.111.11.111'的 密碼: |
密碼驗證通過後,金鑰將按照指定方式複製到您使用者帳戶中的檔案。
手動
如果您無法透過密碼存取遠端伺服器上的帳戶,您可以手動複製公鑰。目標是將 id_rsa.pub 檔案中的值複製到遠端裝置上的 ~/.ssh/authorized_keys 檔案中。正如我們所知,我們可以使用以下命令來查看 id_rsa.pub 金鑰的值:
|
1 |
cat ~/.ssh/id_rsa.pub |
您的 SSH 公鑰內容將如下所示:
|
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test |
接下來,您需要透過任何可行的方式存取您在遠端主機上的帳戶。登入後,請檢查並確認 ~/.ssh 目錄是否存在。如果不存在,您可以執行以下命令來建立它:
|
1 |
mkdir -p ~/.ssh |
現在,您可以使用此命令將 id_rsa.pub 檔案的內容新增到遠端伺服器上 ~/.ssh 目錄中的 authorized_keys 檔案中:
|
1 |
echo public_key_string >> ~/.ssh/authorized_keys |
在此命令中,您不需要輸入「public_key_string」,而是必須輸入您先前透過執行 cat ~/.ssh/id_rsa.pub 命令所提取的金鑰內容。
使用您的 SSH 金鑰進行驗證
現在,您只需使用 SSH 金鑰即可輕鬆進入您的帳戶。這意味著您不再需要密碼即可存取您的伺服器帳戶。您將使用通常用於登入的憑證:
|
1 |
ssh username@remote_host |
這可能會導致彈出以下訊息:
|
1 2 3 |
該 真實性 的 主機 '111.111.11.111 (111.111.11.111)' 能'不 被 建立. ECDSA 金鑰 指紋 為 fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 您 是否 確定 您 想要 要 繼續 連線 (yes/no)? yes |
如果您看到此訊息,請不用擔心。這僅表示本機系統無法識別遠端主機。這通常發生在您首次連線到該主機時。您只需輸入 'yes' 並按 Enter 鍵即可。回到之前的某些步驟,如果您設定了密碼短語(passphrase),此時就需要在此處輸入。如果沒有設定,在 SSH 金鑰通過驗證後,您將直接登入您的帳戶。這將透過您在本機電腦上的目前帳戶啟動一個新的 shell 工作階段。
如何在您的伺服器上停用密碼驗證?
既然您已經知道如何設定 SSH 金鑰,接下來需要停用密碼驗證。即使您可以使用 SSH 金鑰進行驗證,如果您的密碼驗證程序仍處於啟用狀態,您仍然容易受到暴力破解攻擊。在停用密碼驗證機制之前,請確保伺服器上的 root 帳戶已設定基於 SSH 金鑰的驗證,或者已設定的帳戶具有 sudo 權限。確認這一點的原因是為了確保即使在停用密碼時,您仍能保留對該帳戶的管理存取權限。現在您可以使用此 SSH 金鑰登入您的伺服器帳戶。下一步是開啟 SSH 守護程序(daemon)的設定檔:
|
1 |
sudo nano /etc/ssh/sshd_config |
在這裡,您需要搜尋以下指令:
|
1 |
PasswordAuthentication |
您需要取消註解此行,並將值更改為 'no',如下所示:
|
1 |
PasswordAuthentication no |
這樣做將停用基於密碼的驗證。完成後只需儲存檔案並關閉即可。最後,您需要重新啟動裝置以套用變更。如果您使用的是 Ubuntu 或 Debian 裝置,您也可以使用以下命令來停用基於密碼的登入:
|
1 |
sudo service ssh restart |
若要確保您的守護程序(或 sshd)在 CentOS 或 Fedora 機器上僅允許在伺服器上進行基於 SSH 的驗證,請使用以下命令:
|
1 |
sudo service sshd restart |
結論
完成所有這些步驟後,您應該已經在伺服器上設定並運行基於 SSH 金鑰的驗證。現在,您可以放心,您的伺服器安全且受到保護!
祝您電腦使用愉快!
留言
目前尚無留言。成為第一個留言的人吧。