如何在 Azure 上搭配 Windows 使用 SSH 金鑰

適用於:✔️ Linux VM ✔️ 彈性擴展集

本文適用於想要建立及使用安全殼層 (SSH) 金鑰連線至 Azure 中的 Linux 虛擬機器 (VM) 的 Windows 使用者。 您也可以在 Azure 入口網站中產生並儲存 SSH 金鑰,以便透過入口網站建立 VM 時使用。

若要從 Linux 或 macOS 用戶端使用 SSH 金鑰,請參閱快速步驟。 若要進一步了解 SSH 的概觀,請參閱詳細步驟:建立和管理 SSH 金鑰以向 Azure 中的 Linux VM 進行驗證

SSH 和金鑰的概觀

SSH 是允許透過不安全連線進行安全登入的已加密連線通訊協定。 SSH 是 Azure 中裝載 Linux VM 的預設連線通訊協定。 雖然 SSH 本身提供加密的連線,但使用密碼搭配 SSH 仍會讓 VM 容易遭受暴力密碼破解攻擊。 建議您使用公開-私密金鑰組 (也稱為 SSH 金鑰),透過 SSH 連線至 VM。

公開-私密金鑰組就像您住家的門鎖一樣。 門鎖是對外公開的,任何人只要有正確的鑰匙,都可以將門打開。 鑰匙是私密的,可用來將門鎖打開,因此僅提供給您信任的人。

  • 當您建立 VM 時,公開金鑰會放置在 Linux VM 上。

  • 「私密金鑰」會保留在您的本機系統上。 保護此私密金鑰。 不要共用它。

當您連線至 Linux VM 時,VM 會測試 SSH 用戶端,以確定用戶端具有正確的私密金鑰。 如果用戶端具有私密金鑰,則會獲得 VM 的存取權。

根據組織的安全性原則,您可以重複使用單一金鑰組來存取多個 Azure VM 和服務。 每個 VM 不需要有個別的金鑰組。

公開金鑰可以與任何人共用,但只有您 (或您的本機安全性基礎結構) 才應該有權存取私密金鑰。

支援的 SSH 金鑰格式

Azure 目前支援 SSH 通訊協定 2 (SSH-2) RSA 公開/私密金鑰組,最小長度為 2048 位元。 不支援其他金鑰格式,例如 ED25519 和 ECDSA。

SSH 用戶端

最新版的 Windows 10 包含 OpenSSH 用戶端命令,可用來建立和使用 SSH 金鑰,也可從 PowerShell 或命令提示字元進行 SSH 連線。

您也可以在 Azure Cloud Shell 中使用 Bash 連線至您的 VM。 您可以在網頁瀏覽器中從 Azure 入口網站使用 Cloud Shell,或使用 Azure 帳戶擴充功能在 Visual Studio Code 中以終端機的形式使用。

您也可以安裝 Windows 子系統 Linux 版,以透過 SSH 連線至 VM,以及在 Bash 殼層內使用其他原生 Linux 工具。

建立 SSH 金鑰組

要建立和管理 SSH 金鑰,最簡單的方式是使用入口網站加以建立和儲存,以供重複使用。

您也可以在 Azure CLI 中使用 az sshkey create 命令建立金鑰組,如產生和儲存 SSH 金鑰所說明。

若要從 PowerShell 或命令提示字元使用 ssh-keygen 命令在本機電腦上建立 SSH 金鑰組,請輸入下列內容:

ssh-keygen -m PEM -t rsa -b 2048

輸入檔案名稱,或使用括弧中顯示的預設值 (例如 C:\Users\username/.ssh/id_rsa)。 輸入檔案的複雜密碼;如果不想使用複雜密碼,請將複雜密碼保留為空白。

使用您的金鑰建立 VM

若要建立使用 SSH 金鑰進行驗證的 Linux VM,請在建立 VM 時提供您的 SSH 公開金鑰。

使用 Azure CLI 時,您可以使用 az vm create--ssh-key-value 參數來指定公開金鑰的路徑和檔案名稱。

az vm create \
   --resource-group myResourceGroup \
   --name myVM \
   --image UbuntuLTS\
   --admin-username azureuser \
   --ssh-key-value ~/.ssh/id_rsa.pub

使用 PowerShell 時,請使用 New-AzVM,並使用 ` 將 SSH 金鑰新增至 VM 設定。 如需範例,請參閱快速入門:使用 PowerShell 在 Azure 中建立 Linux 虛擬機器

如果您使用入口網站進行許多部署,您可以將公開金鑰上傳至 Azure,以便在從入口網站建立 VM 時輕鬆選取金鑰。 如需詳細資訊,請參閱上傳 SSH 金鑰

連接到您的 VM

公開金鑰已部署到您的 Azure VM 且私密金鑰儲存在本機系統中,此時可以使用 VM 的 IP 位址或 DNS 名稱,透過 SSH 連線到您的 VM。 將下列命令中的 azureuser10.111.12.123 取代為系統管理員使用者名稱、IP 位址 (或完整網域名稱),以及私密金鑰的路徑:

ssh -i ~/.ssh/id_rsa azureuser@10.111.12.123

如果您從未連線至此 VM,則系統會要求您驗證主機指紋。 不過,這可讓您直接接受呈現的指紋,但此動作會將您公開給可能的中間人攻擊人員。 您應一律驗證主機指紋。 您只需要在第一次從用戶端連線時執行此動作。 若要透過入口網站取得主機指紋,請使用具有下列內容的執行命令:ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'

Screenshot showing using the Run Command to validate the host fingerprint.

若要使用 CLI 執行命令,請使用 az vm run-command invoke 命令

如果您在建立金鑰組時設定了複雜密碼,在出現提示時請輸入複雜密碼。

如果 VM 使用 Just-In-Time 存取原則,您必須先要求權限,才能連線到 VM。 如需 Just-In-Time 原則的詳細資訊,請參閱使用 Just-In-Time 原則管理虛擬機器存取

後續步驟