共用方式為


快速步驟:在 Azure 中建立和使用 Linux VM 的 SSH 公開和私密金鑰組

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

您可以利用安全殼層 (SSH) 金鑰組,在 Azure 上建立使用 SSH 金鑰來進行驗證的虛擬機器 (VM)。 本文說明如何快速產生和使用 Linux VM 的 SSH 公開和私密金鑰檔案組。 您可以使用 Azure Cloud Shell、macOS 或 Linux 主機,完成這些步驟。

如需針對 SSH 問題進行疑難排解的說明,請參閱疑難排解 SSH 連線至 Azure Linux VM 失敗、錯誤或被拒的問題

注意

使用 SSH 金鑰建立的 VM 預設會設定為停用密碼,這會大幅增加暴力密碼破解猜測嘗試的困難度。

如需詳細的背景和範例,請參閱建立 SSH 金鑰組的詳細步驟

如需在 Windows 電腦上產生及使用 SSH 金鑰的其他方式,請參閱如何在 Azure 上搭配 Windows 使用 SSH 金鑰

支援的 SSH 金鑰格式

Azure 目前支援下列金鑰類型:

  • SSH 通訊協定 2 (SSH-2) RSA (Rivest, Shamir, Adleman) 最小長度為 2048 位
  • ED25519長度為256位的金鑰

目前不支援其他主要格式,例如橢圓曲線 Diffie–Hellman (ECDH) 和橢圓曲線數位簽名演算法 (ECDSA)。

建立 SSH 金鑰組

使用 ssh-keygen 命令來產生 SSH 公開和私密金鑰檔案。 根據預設,這些檔案會建立在 ~/.ssh 目錄中。 您可以指定不同位置和選擇性密碼 (「複雜密碼」) 來存取私密金鑰檔案。 如果指定位置中存在相同名稱的 SSH 金鑰組,則系統會覆寫那些檔案。

下列命令會使用 RSA 加密和 4096 的位元長度建立 SSH 金鑰組:

ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/id_rsa.pem

下列命令會使用固定長度為 256 位的加密ED25519來建立 SSH 金鑰組:

ssh-keygen -m PEM -t ed25519 -f ~/.ssh/id_ed25519.pem

注意

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

如果您使用 Azure CLI 搭配 az vm create 命令來建立您的 VM,您即可選擇性地使用 --generate-ssh-keys 選項產生 SSH 公開金鑰和私密金鑰檔案。 金鑰檔案會儲存在 ~/.ssh 目錄中,除非使用 --ssh-dest-key-path 選項另行指定。 如果 SSH 金鑰組已經存在,而且使用 --generate-ssh-keys 選項,將不會產生新的金鑰組,而是使用現有的金鑰組。 在下列命令中,將 VMnameRGnameUbuntuLTS 取代為您自己的值:

az vm create --name VMname --resource-group RGname --image Ubuntu2204 --generate-ssh-keys

注意

az sshkey create command deafults to RSA encryption and cannot be use to generate ED25519 key pairs, how you can create a ED25519 key pair using ssh-keygen as described and then use that public key to create a VM.

部署 VM 時,提供 SSH 公開金鑰

若要建立使用 SSH 金鑰進行驗證的 Linux VM,請在使用 Azure 入口網站、Azure CLI、Azure Resource Manager 範本或其他方法建立 VM 時,指定您的 SSH 公開金鑰:

如果您不熟悉 SSH 公開金鑰的格式,可以使用下列 cat 命令顯示您的公開金鑰,如果需要,將 ~/.ssh/id_rsa.pub 取代為您自己的公開金鑰檔案的路徑和檔案名稱:

RSA 金鑰組

cat ~/.ssh/id_rsa.pub

典型的 RSA 公鑰值看起來像下列範例:

ssh-rsa AAAAB3NzaC1yc2EAABADAQABAAACAQC1/KanayNr+Q7ogR5mKnGpKWRBQU7F3Jjhn7utdf7Z2iUFykaYx+MInSnT3XdnBRS8KhC0IP8ptbngIaNOWd6zM8hB6UrcRTlTpwk/SuGMw1Vb40xlEFphBkVEUgBolOoANIEXriAMvlDMZsgvnMFiQ12tD/u14cxy1WNEMAftey/vX3Fgp2vEq4zHXEliY/sFZLJUJzcRUI0MOfHXAuCjg/qyqqbIuTDFyfg8k0JTtyGFEMQhbXKcuP2yGx1uw0ice62LRzr8w0mszftXyMik1PnshRXbmE2xgINYg5xo/ra3mq2imwtOKJpfdtFoMiKhJmSNHBSkK7vFTeYgg0v2cQ2+vL38lcIFX4Oh+QCzvNF/AXoDVlQtVtSqfQxRVG79Zqio5p12gHFktlfV7reCBvVIhyxc2LlYUkrq4DHzkxNY5c9OGSHXSle9YsO3F1J5ip18f6gPq4xFmo6dVoJodZm9N0YMKCkZ4k1qJDESsJBk2ujDPmQQeMjJX3FnDXYYB182ZCGQzXfzlPDC29cWVgDZEXNHuYrOLmJTmYtLZ4WkdUhLLlt5XsdoKWqlWpbegyYtGZgeZNRtOOdN6ybOPJqmYFd2qRtb4sYPniGJDOGhx4VodXAjT09omhQJpE6wlZbRWDvKC55R2d/CSPHJscEiuudb+1SG2uA/oik/WQ== username@domainname

ED25519金鑰組

cat ~/.ssh/id_ed25519.pub

一般ED25519公鑰值看起來像下列範例:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILRjWGWLeiUQ3U9fNnCsNpXIyACpD/Jbm09OZGsz3DIM username@domainname

如果您在 Azure 入口網站或 Resource Manager 範本中複製和貼上要使用之公開金鑰檔案的內容,請確定您並未複製任何結尾空白字元。 若要在 macOS 中複製公開金鑰,您可以透過管道將公開金鑰檔案傳送至 pbcopy。 同樣地,在 Linux 中,您可以將公開金鑰檔案透過管道傳送至 xclip 等程式。

您放在 Azure 中 Linux VM 上的公鑰預設會儲存在目錄下 ~/.ssh/ ,除非您在建立密鑰組時指定了不同的位置。 若要使用 Azure CLI 2.0 搭配現有公開金鑰來建立 VM,可以使用 az vm create 命令加上 --ssh-key-values 選項,來指定這個公開金鑰的值並選擇性地指定位置。 在下列命令中,以您自己的值取代 myVMmyResourceGroupUbuntuLTSazureusermysshkey.pub

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --ssh-key-values mysshkey.pub

如果您想要搭配 VM 使用多個 SSH 金鑰,則可以在逗號分隔清單中輸入這些金鑰,如 --ssh-key-values sshkey-desktop.pub, sshkey-laptop.pub

透過 SSH 連線到您的 VM

在公開金鑰已部署到您的 Azure VM 且私密金鑰儲存在本機系統之後,可以使用 VM 的 IP 位址或 DNS 名稱,透過 SSH 連線到您的 VM。 在下列命令中,將 azureusermyvm.westus.cloudapp.azure.com 取代為系統管理員使用者名稱和完整網域名稱 (或 IP 位址):

ssh azureuser@myvm.westus.cloudapp.azure.com

如果您第一次連線到此 VM,系統會要求您驗證主機的指紋。 接受所提供的指紋很誘人,但這種方法會讓您面臨可能的中間人攻擊。 您應一律驗證主機指紋。 您只需要在第一次從用戶端連線時執行此動作。 若要透過入口網站取得主機指紋,請使用「執行命令」功能來執行命令 ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'

顯示使用執行命令來驗證主機指紋的螢幕快照。

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

如果您在建立金鑰組時指定了複雜密碼,請在登入程序期間出現提示時輸入複雜密碼。 VM 會新增至 ~/.ssh/known_hosts 檔案,而且系統不會要求您重新連線,除非 Azure VM 上的公開金鑰有變更或伺服器名稱已從 ~/.ssh/known_hosts 中移除。

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

下一步