快速步驟:在 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 公開/私密金鑰組,最小長度為 2048 位元。 不支援其他金鑰格式,例如 ED25519 和 ECDSA。

建立 SSH 金鑰組

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

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

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

注意

您也可以在 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

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

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

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

cat ~/.ssh/id_rsa.pub

典型的公開金鑰值如下列範例所示:

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

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

您放置在 Azure 中 Linux VM 上的公開金鑰預設會儲存在 ~/.ssh/id_rsa.pub 中,除非您在建立金鑰組時指定不同的位置。 若要使用 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}'

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

若要使用 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 原則管理虛擬機器存取

下一步