針對 Azure Linux VM 的 SSH 連線失敗、錯誤輸出或拒絕進行疑難解答

本文可協助您找出並修正當您嘗試連線至Linux虛擬機 (VM) 時,安全殼層 (SSH) 錯誤、SSH 連線失敗或 SSH 被拒絕所造成的問題。 您可以使用適用於 Linux 的 Azure 入口網站、Azure CLI 或 VM 存取擴充功能來針對連線問題進行疑難解答和解決。

注意事項

本文是否有幫助? 您的輸入對我們很重要。 請使用此頁面上的 [ 意見反應 ] 按鈕,讓我們知道本文如何為您運作,或我們如何加以改善。

快速疑難解答步驟

在每個疑難解答步驟之後,請嘗試重新連線到 VM。

  1. 重設 SSH 組態
  2. 重設 用戶的認證。
  3. 確認 網路安全組 規則允許 SSH 流量和角色指派。
    • 確定網路安全 組規則 存在,以允許預設 (SSH 流量,TCP 埠 22) 。
    • 若未使用 Azure 負載平衡器,您就無法使用埠重新導向/對應。
    • 如果您使用 Microsoft Entra ID 來管理 SSH 登入,則必須在包含 VM 及其相關聯資源的資源群組上,將虛擬機系統管理員登入或虛擬機使用者登入角色指派給使用者。 否則,將會收到「公鑰) (許可權遭拒」錯誤。 如需詳細資訊,請參閱設定使用 Microsoft Entra 登入之 VM 的角色指派
  4. 檢查 VM 資源健康情況
    • 確定 VM 報告狀況良好。
    • 如果您已 啟用開機診斷,請確認 VM 未報告記錄中的開機錯誤。
  5. 重新啟動 VM
  6. 重新部署 VM

繼續閱讀以取得更詳細的疑難解答步驟和說明。

可用的方法可針對 SSH 連線問題進行疑難解答

您可以使用下列其中一種方法來重設認證、SSH 設定,或針對 SSH 服務的狀態進行疑難解答:

  • Azure 入口網站 - 如果您需要快速重設 SSH 組態或 SSH 金鑰,而且未安裝 Azure 工具,則很棒。
  • Azure VM 序列控制台 - 不論 SSH 設定為何,VM 序列主控台都會運作,並將提供互動式控制台給您的 VM。 事實上,「無法 SSH」的情況是序列控制台特別設計來協助解決的狀況。 更多詳細數據請參閱下方。
  • 透過 Azure 入口網站 使用執行指令 - 您可以透過 Azure 入口網站 使用執行命令功能來執行基本命令。 輸出會傳回至入口網站。
  • Azure CLI - 如果您已經在命令行上,請快速重設 SSH 設定或認證。 如果您使用傳統 VM,可以使用 Azure 傳統 CLI
  • Azure VMAccessForLinux 擴充功能 - 建立並重複使用 json 定義檔案來重設 SSH 組態或用戶認證。

在每個疑難解答步驟之後,請嘗試再次連線到您的 VM。 如果您仍然無法連線,請嘗試下一個步驟。

使用 Azure 入口網站

Azure 入口網站 提供快速的方式來重設 SSH 設定或使用者認證,而不需要在本機計算機上安裝任何工具。

若要開始,請在 Azure 入口網站 中選取您的 VM。 向下卷動至 [ 說明] 區段,然後選取 [ 重設密碼 ],如下列範例所示:

重設 S S H 組態或 Azure 入口網站 中認證的螢幕快照。

重設 SSH 組態

若要重設 SSH 組態,請在 [模式] 區段中選Reset configuration only取 ,如上一個螢幕快照所示,然後選取 [更新]。 完成此動作之後,請再次嘗試存取您的 VM。

重設使用者的 SSH 認證

若要重設現有使用者的認證,請在 [模式] 區段中選Reset SSH public key取 或 Reset password ,如上一個螢幕快照所示。 指定使用者名稱和 SSH 金鑰或新密碼,然後選取 [ 更新]

您也可以從此功能表,在 VM 上建立具有 sudo 許可權的使用者。 輸入新的使用者名稱和相關聯的密碼或 SSH 金鑰,然後選取 [ 更新]

檢查安全性規則

使用 IP流量驗證 來確認網路安全組中的規則是否封鎖虛擬機的流量。 您也可以檢閱有效的安全組規則,以確保輸入「允許」NSG 規則存在,並已針對 SSH 埠設定優先順序 (預設值 22) 。 如需詳細資訊,請 參閱使用有效的安全性規則對 VM 流量進行疑難解答

檢查路由

使用 網路監看員的下一個點功能來確認路由不會防止流量路由傳送至虛擬機或從虛擬機傳送。 您也可以檢閱有效的路由,以查看網路介面的所有有效路由。 如需詳細資訊,請 參閱使用有效的路由對 VM 流量進行疑難解答

使用 Azure VM 序列控制台

Azure VM 序列主控台可讓您存取 Linux 虛擬機的文字型主控台。 您可以使用 主控台,針對互動式殼層中的 SSH 連線進行疑難解答。 請確定您已符合使用序列主控台 的必要條件 ,並嘗試下列命令以進一步針對 SSH 連線能力進行疑難解答。

檢查 SSH 服務是否正在執行

若要檢查服務狀態,請使用下列命令,此命令適用於最新的 Linux 發行版:

sudo systemctl status sshd.service

請參閱下列輸出範例。 從 Active 輸出中的行檢查服務狀態。 輸出也會顯示正在接聽的埠和IP位址。

user@hostname:~$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-23 17:44:36 UTC; 1 day 3h ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 829 (sshd)
      Tasks: 1 (limit: 9535)
     Memory: 5.1M
     CGroup: /system.slice/ssh.service
             └─829 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

Jun 23 17:44:35 ubu2004 systemd[1]: Starting OpenBSD Secure Shell server...
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on 0.0.0.0 port 22.
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on :: port 22.
Jun 23 17:44:36 ubu2004 systemd[1]: Started OpenBSD Secure Shell server.

如果此命令無法使用或傳回非預期的結果,請使用其他可用的命令。 您可以使用 ss 命令作為 root,或透過 sudo 命令來確認 SSH 服務是否正在您的 VM 上執行。

下列範例示範如何透過 sudo執行 ss 命令:

sudo ss --listen --tcp --process --numeric | grep sshd

注意事項

我們建議 ss 使用 命令, netstat 因為命令已被取代,而且不一定會在新式散發套件中使用。

如果有任何輸出,SSH 就會啟動並執行。 請參閱下列輸出範例:

$ sudo ss -ltpn | grep sshd
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=829,fd=3))
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=829,fd=4))

-ltpn 是自變數的 --listen --tcp --process –numeric 簡短形式。 輸出顯示 SSHD 進程 829 正在接聽 IPv4 和 IPv6 位址。

檢查哪個埠 SSH 正在執行

上述命令輸出顯示 SSHD 程式正在埠 22 上接聽。 當 SSHD 程式設定為在另一個埠上執行時,埠會顯示在輸出中。 若要檢查是否已在標準組態檔中進行變更,請使用下列其中一個命令檢查預設組態檔 /etc/ssh/sshd_config

grep -i port /etc/ssh/sshd_config

grep -i listen /etc/ssh/sshd_config

輸出看起來會像下面這樣:

Port 22

在輸出中開頭為 # 的任何一行都是批注,而且可以放心地忽略。 如果未傳回任何專案,或這幾行是批注,則會使用預設組態。 預設設定是接聽系統上埠 22 上的所有 IP 位址。

透過 Azure 入口網站 使用執行命令

如果您無法透過序列主控台執行命令,例如,當只有 SSH 金鑰用於驗證時,可以使用執行命令功能來發出命令和檢視輸出。 先前從序列主控台執行的所有命令,都可以在 Azure 入口網站 的 [執行命令] 區段中以非互動方式執行。 輸出會傳回至 Azure 入口網站。 不需要使用 sudo 在執行命令內容中執行命令。

使用 Azure CLI

如果您尚未安裝,請安裝最新的 Azure CLI ,並使用 az login 登入 Azure 帳戶。

如果您已建立並上傳自定義 Linux 磁碟映像,請確定已安裝 Microsoft Azure Linux Agent 2.0.5 版或更新版本。 針對使用資源庫映像建立的 VM,此存取延伸模組已為您安裝和設定。

重設 SSH 組態

您一開始可以嘗試將 SSH 組態重設為預設值,並在 VM 上重新啟動 SSH 伺服器。 這不會變更用戶帳戶名稱、密碼或 SSH 金鑰。 下列範例會使用 az vm user reset-ssh,在 中myResourceGroup名為 的 myVM VM 上重設 SSH 設定。 使用您自己的值,如下所示:

az vm user reset-ssh --resource-group myResourceGroup --name myVM

重設使用者的 SSH 認證

下列範例會使用 az vm user update,在 中名為 的 VM 上,將 的認證重設為 myUsernamemyPassword指定的myVMmyResourceGroup值。 使用您自己的值,如下所示:

az vm user update --resource-group myResourceGroup --name myVM \
     --username myUsername --password myPassword

如果使用 SSH 金鑰驗證,您可以指定的使用者重設 SSH 金鑰。 下列範例會使用 az vm access set-linux-user,在 中名為 的 VM 上,為名為 的myUsernamemyVM使用者更新儲存在 ~/.ssh/id_rsa.pub 中的 myResourceGroupSSH 密鑰。 使用您自己的值,如下所示:

az vm user update --resource-group myResourceGroup --name myVM \
    --username myUsername --ssh-key-value ~/.ssh/id_rsa.pub

使用 VMAccess 擴充功能

適用於Linux的 VM 存取擴充功能會讀取 json 檔案,以定義要執行的動作。這些動作包括重設 SSHD、重設 SSH 金鑰或新增使用者。 您仍然可以使用 Azure CLI 來呼叫 VMAccess 擴充功能,但您可以視需要在多個 VM 上重複使用 json 檔案。 這種方法可讓您建立 json 檔案的存放庫,然後針對指定的案例呼叫此存放庫。

重設 SSHD

使用下列內容建立名為 settings.json 的檔案:

{
    "reset_ssh":True
}

使用 Azure CLI,您接著會藉由指定 json 檔案來呼叫 VMAccessForLinux 擴充功能來重設 SSHD 連線。 下列範例會使用 az vm extension set,在 中myResourceGroup名為 的 myVM VM 上重設 SSHD。 使用您自己的值,如下所示:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

重設使用者的 SSH 認證

如果 SSHD 似乎正常運作,您可以重設提供者用戶的認證。 若要重設用戶的密碼,請建立名為 的 settings.json檔案。 下列範例會將的認證重設為 myUsername 中指定的 myPassword值。 使用您自己的值,在檔案 settings.json 中輸入下列幾行:

{
    "username":"myUsername", "password":"myPassword"
}

或者,若要重設使用者的 SSH 金鑰,請先建立名為 的 settings.json檔案。 下列範例會在 中名為 的 VM 上,將 的認證重設為 myUsernamemyPassword指定的myVMmyResourceGroup值。 使用您自己的值,在檔案 settings.json 中輸入下列幾行:

{
    "username":"myUsername", "ssh_key":"mySSHKey"
}

建立 json 檔案之後,請使用 Azure CLI 來呼叫 VMAccessForLinux 擴充功能,藉由指定您的 json 檔案來重設 SSH 使用者認證。 下列範例會在 中名為的 myVMmyResourceGroupVM 上重設認證。 使用您自己的值,如下所示:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

使用 Azure 傳統 CLI

如果您尚未安裝,請 安裝 Azure 傳統 CLI 並連線到您的 Azure 訂用帳戶。 請確定您使用 Resource Manager 模式,如下所示:

azure config mode arm

如果您已建立並上傳自定義 Linux 磁碟映像,請確定已安裝 Microsoft Azure Linux Agent 2.0.5 版或更新版本。 針對使用資源庫映像建立的 VM,此存取延伸模組已為您安裝和設定。

重設 SSH 組態

SSHD 組態本身可能設定錯誤或服務發生錯誤。 您可以重設 SSHD 以確保 SSH 組態本身有效。 重設 SSHD 應該是您所採取的第一個疑難解答步驟。

下列範例會在名為myResourceGroup的資源群組中名為 的 myVM VM 上重設 SSHD。 使用您自己的 VM 和資源組名,如下所示:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --reset-ssh

重設使用者的 SSH 認證

如果 SSHD 似乎正常運作,您可以重設提供者用戶的密碼。 下列範例會在 中名為 的 VM 上,將 的認證重設為 myUsernamemyPassword指定的myVMmyResourceGroup值。 使用您自己的值,如下所示:

azure vm reset-access --resource-group myResourceGroup --name myVM \
     --user-name myUsername --password myPassword

如果使用 SSH 金鑰驗證,您可以指定的使用者重設 SSH 金鑰。 下列範例會在 中名為的 VM 上,針對名為 的myUsernamemyVMmyResourceGroup使用者,更新 中儲存~/.ssh/id_rsa.pub的 SSH 金鑰。 使用您自己的值,如下所示:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --user-name myUsername --ssh-key-file ~/.ssh/id_rsa.pub

重新啟動 VM

如果您已重設 SSH 設定和使用者認證,或發生錯誤,您可以嘗試重新啟動 VM 以解決基礎計算問題。

Azure 入口網站

若要使用 Azure 入口網站 重新啟動 VM,請選取您的 VM,然後選取 [重新啟動],如下列範例所示:

在 Azure 入口網站 中重新啟動虛擬機的螢幕快照。

Azure CLI

下列範例會使用 az vm restart 來重新啟動名為 之資源群組中名為 myVMmyResourceGroupVM。 使用您自己的值,如下所示:

az vm restart --resource-group myResourceGroup --name myVM

Azure 傳統 CLI

重要事項

傳統 VM 將於 2023 年 9 月 1 日淘汰

如果您使用 ASM 的 IaaS 資源,請在 2023 年 9 月 1 日前完成移轉。 我們鼓勵您更快進行切換,以利用 Azure Resource Manager 中的許多功能增強功能。

如需詳細資訊,請參閱在 2023 年 9 月 1 日前將 IaaS 資源遷移至 Azure Resource Manager

下列範例會在名為的資源群組中重新啟動名為 myVMmyResourceGroupVM。 使用您自己的值,如下所示:

azure vm restart --resource-group myResourceGroup --name myVM

重新部署 VM

您可以將 VM 重新部署至 Azure 內的另一個節點,這可能會修正任何基礎網路問題。 如需重新部署 VM 的相關信息,請參閱 將虛擬機重新部署至新的 Azure 節點

注意事項

此作業完成之後,會遺失暫時磁碟數據,並更新與虛擬機相關聯的動態IP位址。

Azure 入口網站

若要使用 Azure 入口網站 重新部署 VM,請選取您的 VM,然後向下捲動至 [說明] 區段。 選取 [重新部署] ,如下列範例所示:

在 Azure 入口網站 中重新部署虛擬機的螢幕快照。

Azure CLI

下列範例會使用 az vm redeploy 重新部署名為 的資源群組中名為 myVMmyResourceGroupVM。 使用您自己的值,如下所示:

az vm redeploy --resource-group myResourceGroup --name myVM

Azure 傳統 CLI

下列範例會在名為的資源群組中重新部署名為 myVMmyResourceGroupVM。 使用您自己的值,如下所示:

azure vm redeploy --resource-group myResourceGroup --name myVM

使用傳統部署模型建立的 VM

重要事項

傳統 VM 將於 2023 年 9 月 1 日淘汰

如果您使用 ASM 的 IaaS 資源,請在 2023 年 9 月 1 日前完成移轉。 我們鼓勵您更快進行切換,以利用 Azure Resource Manager 中的許多功能增強功能。

如需詳細資訊,請參閱在 2023 年 9 月 1 日前將 IaaS 資源遷移至 Azure Resource Manager

請嘗試下列步驟來解決使用傳統部署模型所建立 VM 最常見的 SSH 連線失敗。 在每個步驟之後,請嘗試重新連線到 VM。

  • 從 Azure 入口網站 重設遠端訪問。 在 Azure 入口網站 上,選取您的 VM,然後選取 [重設遠端...]

  • 重新啟動 VM。 在 Azure 入口網站 中,選取您的 VM,然後選取 [重新啟動]

  • 將 VM 重新部署至新的 Azure 節點。 如需如何重新部署 VM 的資訊,請參閱將 虛擬機重新部署至新的 Azure 節點

    此作業完成之後,暫時磁碟數據將會遺失,且會更新與虛擬機相關聯的動態IP位址。

  • 請依照 如何重設 Linux 型虛擬機的密碼或 SSH 中的 指示進行:

    • 重設密碼或 SSH 金鑰。
    • 建立 sudo 用戶帳戶。
    • 重設 SSH 組態。
  • 檢查 VM 的資源健康情況是否有任何平台問題。
    選取您的 VM,然後向下捲動 [設定>] [檢查健康情況]

其他資源

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群