全部產品
Search
文件中心

Elastic Compute Service:手動綁定金鑰組實現SSH免密登入

更新時間:Nov 16, 2024

在控制台綁定密鑰時需要重啟執行個體,但這可能影響商務持續性。如果您希望在不重啟執行個體的情況下綁定密鑰,可以參考本文進行手動操作。本文將詳細介紹如何為執行個體手動綁定金鑰組,實現免密登入。

方案概述

手動綁定金鑰組並實現免密登入需要進行以下操作:

  1. 產生金鑰組:其中密鑰作為後續登入的憑證,由您自行儲存,公開金鑰將儲存在執行個體內。

  2. 為執行個體綁定公開金鑰:通過可靠的串連方式,將您的公開金鑰添加到執行個體中。本步驟主要關注~/.ssh/authorized_keys設定檔。

  3. 開啟SSH服務端的公開金鑰認證功能:在綁定公開金鑰後,您還需要在執行個體的SSH服務端開啟公開金鑰認證功能。本步驟主要關注/etc/ssh/sshd_config設定檔。

  4. 通過金鑰組認證串連執行個體:在完成前幾步操作後,可以通過SSH認證的方式串連執行個體,驗證密鑰認證功能已經配置成功。

1. 產生金鑰組

您可以通過多種方式產生金鑰組,不同的工具產生金鑰組的步驟有所差別,本步驟以通過執行ssh-keygen命令產生金鑰組為例。在命令列輸入以下命令產生金鑰組。

說明

您也可以在控制台建立金鑰組,建立後會自動下載私密金鑰,此時還需要使用工具擷取其公開金鑰資訊,具體操作,請參見建立金鑰組查看公開金鑰資訊

ssh-keygen -t rsa -b 2048 -f id_rsa
  • -t rsa:代表密鑰類型為rsa金鑰組。

  • -b 2048:代表密鑰長度為2048位。

  • -f id_rsa:代表產生金鑰組的檔案名稱以及儲存位置。

重要

執行這條命令後,系統會提示您輸入一個密碼短語(passphrase),用於保護私密金鑰。設定密碼後,即使私密金鑰被盜,攻擊者也要求輸入密碼才可以使用私密金鑰。

如果您不希望為私密金鑰設定密碼,可以直接按斷行符號鍵跳過。

命令執行完成後,會在當前命令列所在目錄下產生一對密鑰檔案:id_rsa.pub(公開金鑰)、id_rsa(私密金鑰),請妥善儲存私密金鑰,不要泄漏給他人

2. 為執行個體綁定公開金鑰

為執行個體綁定公開金鑰後,可以在串連執行個體時通過與其相對應的私密金鑰作為登入憑證。

  1. 選擇合適的方式串連到ECS執行個體,具體操作,請參見2.1 通過SSH的方式串連執行個體(Linux)2.3 通過會話管理串連執行個體(Linux/Windows)

  2. ~/.ssh/authorized_keys中配置公開金鑰檔案。

    在操作之前,您需要明確登入Linux系統的使用者身份,例如使用ecs-user的身份登入執行個體,就需要為ecs-user配置公開金鑰。

    設定root使用者的公開金鑰

    1. 建立authorized_keys設定檔。

      root使用者的公開金鑰設定檔在/root/.ssh/authorized_keys路徑下。如果沒有該檔案,請輸入以下命令建立.ssh檔案夾和authorized_keys設定檔。

      sudo mkdir /root/.ssh
      sudo touch /root/.ssh/authorized_keys
    2. 步驟1中產生的公開金鑰資訊複製到/root/.ssh/authorized_keys設定檔中。

      您可以使用vim編輯器編輯該檔案,具體操作,請參見Vim編輯器
    3. 修改該設定檔的許可權。

      該檔案配置過高的許可權會導致SSH串連失敗,請設定以下許可權。

      sudo chmod 700 /root/.ssh
      sudo chmod 600 /root/.ssh/authorized_keys

    設定非root使用者的公開金鑰

    如果您要為其他系統使用者綁定金鑰組,請參考以下步驟。

    1. 建立authorized_keys設定檔。

      找到/home/<username>/.ssh/authorized_keys設定檔,其中<username>為您待綁定金鑰組的使用者。

      例如您需要給ecs-user綁定金鑰組,您需要關注/home/ecs-user/.ssh/authorized_keys設定檔。

      如果沒有該設定檔,請輸入以下命令在對應使用者的家目錄下建立設定檔。

      命令中<user_name>為您待綁定公開金鑰使用者的使用者名稱。
      sudo mkdir /home/<username>/.ssh
      sudo touch /home/<username>/.ssh/authorized_keys
    2. 步驟1中產生的公開金鑰複製到/home/<user_name>/.ssh/authorized_keys設定檔中。該檔案可以支援多行,如果要綁定多個金鑰組,可以在新的一行添加新的公開金鑰資訊。

      您可以使用vim編輯器編輯該檔案,具體操作,請參見Vim編輯器
    3. 修改該設定檔的許可權。

      該檔案配置過高的許可權會導致SSH串連失敗,請設定以下許可權。

      命令中<username>為您待綁定公開金鑰使用者的使用者名稱。
      sudo chmod 700 /home/<username>/.ssh
      sudo chmod 600 /home/<username>/.ssh/authorized_keys

3. 開啟SSH服務的公開金鑰認證功能

在執行個體內配置公開金鑰之後,需要開啟SSH服務的公開金鑰認證功能,否則無法使用金鑰組串連執行個體。

  1. 修改SSH的設定檔/etc/ssh/sshd_config中的PubkeyAuthentication參數為yes,代表開啟公開金鑰認證功能。

    重要

    您可以使用vim編輯器編輯該檔案,具體操作,請參見Vim編輯器。建議修改前備份該設定檔,防止誤操作導致的SSH服務啟動失敗。

  2. 輸入命令,重啟SSH服務,使配置生效。

    以Alibaba Cloud Linux 3為例,輸入以下命令重啟SSH服務。

    部分作業系統(Ubuntu/Debian)的SSH服務名為ssh而非sshd,請根據實際情況調整。
    sudo systemctl restart sshd
    重要

    如果您是通過SSH的方式串連到執行個體,重啟服務時您的串連可能會發生中斷,等待SSH服務重啟完成後,您可以重新串連到該執行個體。

4. 通過金鑰組認證實現免密登入

在配置完成金鑰組之後,您可以使用金鑰組認證的方式串連到Linux執行個體,不同的工具使用步驟不同,本文以通過命令列和阿里雲控制台的Workbench為例,為您介紹如何通過金鑰組認證的方式登入Linux執行個體。

命令列

在完成前面的配置操作之後,您可以在命令列輸入以下命令串連Linux執行個體。

ssh -i <identity_file_path> -p <ssh_port> <username>@<server_ip>

該命令中各個參數說明如下:

  • <identity_file_path>:私密金鑰檔案位置。

  • <ssh_port>:SSH服務的連接埠,預設為22。

  • <username>: 通過指定使用者的身份登入執行個體。

  • <server_ip>:執行個體的IP地址(如果是本地遠端連線ECS執行個體,需要填寫執行個體的公網IP地址,若是在內網互連的其他雲端服務器上,可使用私網IP地址)。

Workbench

在使用Workbench通過公網IP或私網IP(SSH方式)串連到Linux執行個體時,可以選擇通過金鑰組認證的方式登入執行個體。具體操作,請參見通過SSH的方式登入Linux執行個體(支援私網)

image

更多操作

為同一使用者綁定多個金鑰組(公開金鑰)

使用者家目錄下的.ssh/authorized_keys檔案支援多行配置,每行添加一個公開金鑰,即可讓多個金鑰組使用同一使用者身份登入。

手動解除綁定金鑰組(公開金鑰)

您可以通過編輯使用者家目錄下的.ssh/authorized_keys檔案,直接刪除特定的公開金鑰條目。刪除後,對應的私密金鑰將無法用於該使用者的執行個體串連。

通過~/.ssh/config設定檔簡化ssh串連命令

如果您經常串連到多個不同的執行個體,您可以使用本機~/.ssh/config設定檔簡化命令,無需每次登入都輸入完整的命令。具體配置方式如下。

  • 實現效果

    簡化前:

    ssh -i <identity_file_path> -p <ssh_port> <username>@<server_ip>

    簡化後:

    ssh <server_name>
  • 配置流程

    1. 在您的本機編輯或建立~/.ssh/config設定檔。

    2. 在該設定檔下添加以下內容:

      Host <server_name>
        HostName: <server_ip>
        User <username>
        IdentityFile <identity_file_path>
        Port <ssh_port>

      該設定檔中各個參數說明如下:

      • <server_name>:自訂伺服器別名。

      • <server_ip>:執行個體的IP地址。

      • <username>: 通過指定使用者的身份登入執行個體。

      • <identity_file_path>:私密金鑰檔案位置。

      • <ssh_port>:SSH服務的連接埠,預設為22。

    3. 配置後使用簡化命令。<server_name>為您在~/.ssh/config設定檔中設定的伺服器別名。

      ssh <server_name>