針對 SSH 連線至 Azure Linux VM 失敗、發生錯誤或被拒進行疑難排解Troubleshoot SSH connections to an Azure Linux VM that fails, errors out, or is refused

本文可協助您找出並更正當您嘗試連接到 Linux 虛擬機器 (VM) 時,因為安全殼層 (SSH) 錯誤、SSH 連線失敗或 SSH 被拒而發生的問題。This article helps you find and correct the problems that occur due to Secure Shell (SSH) errors, SSH connection failures, or SSH is refused when you try to connect to a Linux virtual machine (VM). 您可以使用 Azure 入口網站、Azure CLI 或適用於 Linux 的 VM 存取擴充功能,針對連線問題進行疑難排解並予以解決。You can use the Azure portal, Azure CLI, or VM Access Extension for Linux to troubleshoot and resolve connection problems.

如果您在本文中有任何需要協助的地方,您可以連絡 MSDN Azure 和 Stack Overflow 論壇上的 Azure 專家。If you need more help at any point in this article, you can contact the Azure experts on the MSDN Azure and Stack Overflow forums. 或者,您可以提出 Azure 支援事件。Alternatively, you can file an Azure support incident. 請移至 Azure 支援網站,然後選取 [取得支援]。Go to the Azure support site and select Get support. 如需使用 Azure 支援的資訊,請參閱 Microsoft Azure 支援常見問題集For information about using Azure Support, read the Microsoft Azure support FAQ.

快速疑難排解步驟Quick troubleshooting steps

在每個疑難排解步驟完成之後,請嘗試重新連接到 VM。After each troubleshooting step, try reconnecting to the VM.

  1. 重設 SSH 設定Reset the SSH configuration.
  2. 重設使用者的認證Reset the credentials for the user.
  3. 確認 網路安全性群組 規則允許 SSH 流量。Verify the network security group rules permit SSH traffic.
    • 請確定 網路安全性群組規則 存在,以允許預設 (TCP 埠 22) 的 SSH 流量。Ensure that a Network Security Group rule exists to permit SSH traffic (by default, TCP port 22).
    • 若未使用 Azure 負載平衡器,則無法使用連接埠重新導向 / 對應功能。You cannot use port redirection / mapping without using an Azure load balancer.
  4. 檢查 VM 資源健康狀態Check the VM resource health.
    • 確定 VM 回報告為狀況良好。Ensure that the VM reports as being healthy.
    • 如果您已 啟用開機診斷,請確認 VM 並未在記錄中回報開機錯誤。If you have boot diagnostics enabled, verify the VM is not reporting boot errors in the logs.
  5. 重新開機 VMRestart the VM.
  6. 重新部署 VMRedeploy the VM.

如需更詳細的疑難排解步驟與說明,請繼續閱讀。Continue reading for more detailed troubleshooting steps and explanations.

針對 SSH 連線問題進行疑難排解的可用方法Available methods to troubleshoot SSH connection issues

您可以使用下列方法之一重設認證或 SSH 組態:You can reset credentials or SSH configuration using one of the following methods:

  • Azure 入口網站 - 適用於您需要快速重設 SSH 組態或 SSH 金鑰,而且未安裝 Azure 工具時。Azure portal - great if you need to quickly reset the SSH configuration or SSH key and you don't have the Azure tools installed.
  • AZURE Vm 序列主控台 -無論 SSH 設定為何,VM 序列主控台都可以運作,並會為您的 vm 提供互動式主控台。Azure VM Serial Console - the VM serial console will work regardless of the SSH configuration, and will provide you with an interactive console to your VM. 事實上,「無法 SSH」的情況特別是序列主控台的設計目的是為了協助解決。In fact, "can't SSH" situations are specifically what the serial console was designed to help solve. 請參閱下列詳細資訊。More details below.
  • Azure CLI - 如果您已在命令列上,請快速重設 SSH 設定或認證。Azure CLI - if you are already on the command line, quickly reset the SSH configuration or credentials. 如果您正在使用傳統 VM,可以使用 Azure 傳統 CLIIf you are working with a classic VM, you can use the Azure classic CLI.
  • Azure VMAccessForLinux 擴充功能 - 建立並重複使用 json 定義檔案,以重設 SSH 組態或使用者認證。Azure VMAccessForLinux extension - create and reuse json definition files to reset the SSH configuration or user credentials.

在每個疑難排解步驟完成之後,請再次嘗試連接到 VM。After each troubleshooting step, try connecting to your VM again. 如果仍然無法連線,請嘗試下一個步驟。If you still cannot connect, try the next step.

使用 Azure 入口網站Use the Azure portal

Azure 入口網站可供快速重設 SSH 組態或使用者認證,而不需在本機電腦上安裝任何工具。The Azure portal provides a quick way to reset the SSH configuration or user credentials without installing any tools on your local computer.

若要開始,請在 Azure 入口網站中選取您的 VM。To begin, select your VM in the Azure portal. 向下捲動至 [支援 + 疑難排解] 區段,然後選取 [重設密碼],如下列範例所示︰Scroll down to the Support + Troubleshooting section and select Reset password as in the following example:

在 Azure 入口網站中重設 SSH 組態或認證

重設 SSH 組態Reset the SSH configuration

若要重設 SSH 組態,請在 [模式] 區段中選取 Reset configuration only,如前面的螢幕擷取畫面所示,然後選取 [更新]。To reset the SSH configuration, select Reset configuration only in the Mode section as in the preceding screenshot, then select Update. 完成此動作後,嘗試再次存取您的 VM。Once this action has completed, try to access your VM again.

重設使用者的 SSH 認證Reset SSH credentials for a user

若要重設現有使用者的認證,請在 [模式] 區段中選取 Reset SSH public keyReset password,如前面的螢幕擷取畫面所示。To reset the credentials of an existing user, select either Reset SSH public key or Reset password in the Mode section as in the preceding screenshot. 指定使用者名稱和 SSH 金鑰或新的密碼,然後選取 [更新]。Specify the username and an SSH key or new password, then select Update.

您也可以經由此功能表,在此 VM 上建立具備 sudo 權限的使用者。You can also create a user with sudo privileges on the VM from this menu. 輸入新的使用者名稱和相關聯的密碼或 SSH 金鑰,然後選取 [更新]。Enter a new username and associated password or SSH key, and then select Update.

網路安全性規則Check security rules

使用 IP 流量驗證 來確認網路安全性群組中的規則是否封鎖進出虛擬機器的流量。Use IP flow verify to confirm if a rule in a network security group is blocking traffic to or from a virtual machine. 您也可以檢閱有效的安全性群組規則,以確保輸入「允許」NSG 規則存在並已針對 SSH 連接埠 (預設值 22) 設定優先順序。You can also review effective security group rules to ensure inbound "Allow" NSG rule exists and is prioritized for SSH port (default 22). 如需詳細資訊,請參閱 使用有效安全性規則對 VM 流量流程進行疑難排解For more information, see Using effective security rules to troubleshoot VM traffic flow.

檢查路由Check routing

使用網路監看員的下一個躍點功能,確認路由不會防止流量從虛擬機器往返路由傳送。Use Network Watcher's Next hop capability to confirm that a route isn't preventing traffic from being routed to or from a virtual machine. 您也可以檢閱有效路由,以查看網路介面的所有有效路由。You can also review effective routes to see all effective routes for a network interface. 如需詳細資訊,請參閱使用有效路由來針對 VM 流量流程進行疑難排解For more information, see Using effective routes to troubleshoot VM traffic flow.

使用 Azure VM 序列主控台Use the Azure VM Serial Console

AZURE VM 序列主控台可讓您存取 Linux 虛擬機器的文字型主控台。The Azure VM Serial Console provides access to a text-based console for Linux virtual machines. 您可以使用主控台,在互動式 shell 中針對 SSH 連線進行疑難排解。You can use the console to troubleshoot your SSH connection in an interactive shell. 確定您已符合使用序列主控台的 必要條件 ,並嘗試下列命令以進一步針對 SSH 連線進行疑難排解。Ensure you have met the prerequisites for using Serial Console and try the commands below to further troubleshoot your SSH connectivity.

檢查 SSH 是否正在執行Check that SSH is running

您可以使用下列命令來確認 SSH 是否正在 VM 上執行:You can use the following command to verify whether SSH is running on your VM:

ps -aux | grep ssh

如果有任何輸出,SSH 便會啟動並執行。If there is any output, SSH is up and running.

檢查 SSH 執行所在的埠Check which port SSH is running on

您可以使用下列命令來檢查 SSH 執行所在的埠:You can use the following command to check which port SSH is running on:

sudo grep Port /etc/ssh/sshd_config

您的輸出看起來會像這樣:Your output will look something like:

Port 22

使用 Azure CLIUse the Azure CLI

如果尚未安裝,請安裝最新的 Azure CLI 並使用 az login 來登入 Azure 帳戶。If you haven't already, install the latest Azure CLI and sign in to an Azure account using az login.

如果您已建立並上傳自訂 Linux 磁碟映像,請確定已安裝 Microsoft Azure Linux 代理程式 2.0.5 版或更新版本。If you created and uploaded a custom Linux disk image, make sure the Microsoft Azure Linux Agent version 2.0.5 or later is installed. 若為使用資源庫映像建立的 VM,系統已經為您安裝和設定此存取擴充功能。For VMs created using Gallery images, this access extension is already installed and configured for you.

重設 SSH 組態Reset SSH configuration

您可以一開始先嘗試將 SSH 組態重設為預設值,然後將虛擬機器上的 SSH 伺服器重新開機。You can initially try resetting the SSH configuration to default values and rebooting the SSH server on the VM. 這不會變更使用者帳戶名稱、密碼或 SSH 金鑰。This does not change the user account name, password, or SSH keys. 下列範例會使用 az vm user reset-ssh,在 myResourceGroup 中名為 myVM 的虛擬機器上重設 SSH 組態。The following example uses az vm user reset-ssh to reset the SSH configuration on the VM named myVM in myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

重設使用者的 SSH 認證Reset SSH credentials for a user

下列範例會使用 az vm user update,在 myResourceGroup 中名為 myVM 的虛擬機器上,將 myUsername 的認證重設為 myPassword 中指定的值。The following example uses az vm user update to reset the credentials for myUsername to the value specified in myPassword, on the VM named myVM in myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

如果使用 SSH 金鑰驗證,您可以針對指定的使用者重設 SSH 金鑰。If using SSH key authentication, you can reset the SSH key for a given user. 下列範例會使用 az vm access set-linux-user,在 myResourceGroup 中名為 myVM 的 VM 上,針對名為 myUsername 的使用者更新儲存在 ~/.ssh/id_rsa.pub 中的 SSH 金鑰。The following example uses az vm access set-linux-user to update the SSH key stored in ~/.ssh/id_rsa.pub for the user named myUsername, on the VM named myVM in myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

使用 VMAccess 擴充功能Use the VMAccess extension

適用于 Linux 的 VM 存取擴充功能會讀取 json 檔案,該檔案會定義要執行的動作。這些動作包括重設 SSHD、重設 SSH 金鑰,或新增使用者。The VM Access Extension for Linux reads in a json file that defines actions to carry out. These actions include resetting SSHD, resetting an SSH key, or adding a user. 您仍可使用 Azure CLI 來呼叫 VMAccess 擴充功能,但您可以視需要將 json 檔案重複使用於多個 VM。You still use the Azure CLI to call the VMAccess extension, but you can reuse the json files across multiple VMs if desired. 這種方法可讓您建立 json 檔案的儲存機制,以便之後針對特定案例進行呼叫。This approach allows you to create a repository of json files that can then be called for given scenarios.

重設 SSHDReset SSHD

使用下列內容,建立名為 settings.json 的檔案︰Create a file named settings.json with the following content:

{
    "reset_ssh":True
}

使用 Azure CLI,接著呼叫 VMAccessForLinux 擴充功能,藉由指定 json 檔案來重設 SSH 連線。Using the Azure CLI, you then call the VMAccessForLinux extension to reset your SSHD connection by specifying your json file. 下列範例會使用 az vm extension set,在 myResourceGroup 中名為 myVM 的虛擬機器上重設 SSHD。The following example uses az vm extension set to reset SSHD on the VM named myVM in myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

重設使用者的 SSH 認證Reset SSH credentials for a user

如果 SSHD 似乎能正常運作,您可以針對指定的使用者重設認證。If SSHD appears to function correctly, you can reset the credentials for a giver user. 若要重設使用者的密碼,請建立名為 settings.json 的檔案。To reset the password for a user, create a file named settings.json. 下列範例會將 myUsername 的認證重設為在 myPassword 中指定的值。The following example resets the credentials for myUsername to the value specified in myPassword. 使用您自己的值,將下列幾行程式碼輸入到 settings.json 檔案中︰Enter the following lines into your settings.json file, using your own values:

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

或者,若要重設使用者的 SSH 金鑰,請先建立名為 settings.json 的檔案。Or to reset the SSH key for a user, first create a file named settings.json. 下列範例會在 myResourceGroup 中名為 myVM 的 VM 上,將 myUsername 的認證重設為在 myPassword 中指定的值。The following example resets the credentials for myUsername to the value specified in myPassword, on the VM named myVM in myResourceGroup. 使用您自己的值,將下列幾行程式碼輸入到 settings.json 檔案中︰Enter the following lines into your settings.json file, using your own values:

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

建立 json 檔案之後,使用 Azure CLI 來呼叫 VMAccessForLinux 擴充功能,藉由指定 json 檔案來重設 SSH 使用者認證。After creating your json file, use the Azure CLI to call the VMAccessForLinux extension to reset your SSH user credentials by specifying your json file. 下列範例會在 myResourceGroup 中名為 myVM 的 VM 上重設認證。The following example resets credentials on the VM named myVM in myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

使用 Azure 傳統 CLIUse the Azure classic CLI

如果尚未安裝,請 安裝 Azure 傳統 CLI 並連線至您的 Azure 訂用帳戶If you haven't already, install the Azure classic CLI and connect to your Azure subscription. 確定您使用的是 Resource Manager 模式,如下所示:Make sure that you are using Resource Manager mode as follows:

azure config mode arm

如果您已建立並上傳自訂 Linux 磁碟映像,請確定已安裝 Microsoft Azure Linux 代理程式 2.0.5 版或更新版本。If you created and uploaded a custom Linux disk image, make sure the Microsoft Azure Linux Agent version 2.0.5 or later is installed. 若為使用資源庫映像建立的 VM,系統已經為您安裝和設定此存取擴充功能。For VMs created using Gallery images, this access extension is already installed and configured for you.

重設 SSH 組態Reset SSH configuration

SSHD 組態本身可能設定錯誤,或服務發生錯誤。The SSHD configuration itself may be misconfigured or the service encountered an error. 您可以重設 SSH 以確定 SSH 組態本身有效。You can reset SSHD to make sure the SSH configuration itself is valid. 重設 SSHD 應該是您所採取的第一個疑難排解步驟。Resetting SSHD should be the first troubleshooting step you take.

下列範例會在名為 myResourceGroup 的資源群組中名為 myVM 的 VM 上重設 SSHD。The following example resets SSHD on a VM named myVM in the resource group named myResourceGroup. 使用您自己的 VM 和資源群組名稱,如下所示︰Use your own VM and resource group names as follows:

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

重設使用者的 SSH 認證Reset SSH credentials for a user

如果 SSHD 似乎能正常運作,您可以針對指定的使用者重設密碼。If SSHD appears to function correctly, you can reset the password for a giver user. 下列範例會在 myResourceGroup 中名為 myVM 的 VM 上,將 myUsername 的認證重設為在 myPassword 中指定的值。The following example resets the credentials for myUsername to the value specified in myPassword, on the VM named myVM in myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

如果使用 SSH 金鑰驗證,您可以針對指定的使用者重設 SSH 金鑰。If using SSH key authentication, you can reset the SSH key for a given user. 下列範例會在 myResourceGroup 中名為 myVM 的 VM 上,針對名為 myUsername 的使用者,更新 ~/.ssh/id_rsa.pub 中儲存的 SSH 金鑰。The following example updates the SSH key stored in ~/.ssh/id_rsa.pub for the user named myUsername, on the VM named myVM in myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

重新啟動 VMRestart a VM

如果您重設 SSH 組態和使用者認證,或在執行此作業時發生錯誤,您可以嘗試重新啟動 VM 以處理基礎計算問題。If you have reset the SSH configuration and user credentials, or encountered an error in doing so, you can try restarting the VM to address underlying compute issues.

Azure 入口網站Azure portal

若要使用 Azure 入口網站來重新啟動 VM,請選取您的 VM,然後選取 [重新啟動],如下列範例所示︰To restart a VM using the Azure portal, select your VM and then select Restart as in the following example:

在 Azure 入口網站中重新啟動 VM

Azure CLIAzure CLI

下列範例會使用 az vm restart 來重新啟動名為 myResourceGroup 的資源群組中名為 myVM 的 VM。The following example uses az vm restart to restart the VM named myVM in the resource group named myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

Azure 傳統 CLIAzure classic CLI

重要

傳統 VM 將於 2023 年 3 月 1 日淘汰。Classic VMs will be retired on March 1, 2023.

如果您使用來自 ASM 的 IaaS 資源,請在 2023 年 3 月 1 日前完成移轉。If you use IaaS resources from ASM, please complete your migration by March 1, 2023. 我們鼓勵您及早切換,以利用 Azure Resource Manager 的許多功能增強功能。We encourage you to make the switch sooner to take advantage of the many feature enhancements in Azure Resource Manager.

如需詳細資訊,請參閱請於 2023 年 3 月 1 日之前將您的 IaaS 資源遷移至 Azure Resource ManagerFor more information, see Migrate your IaaS resources to Azure Resource Manager by March 1, 2023.

下列範例會重新啟動名為 myResourceGroup 的資源群組中名為 myVM 的 VM。The following example restarts the VM named myVM in the resource group named myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

重新部署 VMRedeploy a VM

您可以將 VM 重新部署到 Azure 中的另一個節點,這可能會修正任何的基礎網路問題。You can redeploy a VM to another node within Azure, which may correct any underlying networking issues. 如需重新部署 VM 的相關資訊,請參閱將虛擬機器重新部署至新的 Azure 節點For information about redeploying a VM, see Redeploy virtual machine to new Azure node.

注意

此作業完成之後,會遺失暫時磁碟資料,並且會更新與虛擬機器關聯的動態 IP 位址。After this operation finishes, ephemeral disk data is lost and dynamic IP addresses that are associated with the virtual machine are updated.

Azure 入口網站Azure portal

若要使用 Azure 入口網站重新部署 VM,請選取您的 VM 並向下捲動至 [支援 + 疑難排解] 區段。To redeploy a VM using the Azure portal, select your VM and scroll down to the Support + Troubleshooting section. 選取 [重新部署],如下列範例所示︰Select Redeploy as in the following example:

在 Azure 入口網站中重新部署 VM

Azure CLIAzure CLI

下列範例會使用 az vm redeploy 來重新部署名為 myResourceGroup 的資源群組中名為 myVM 的 VM。The following example use az vm redeploy to redeploy the VM named myVM in the resource group named myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

Azure 傳統 CLIAzure classic CLI

下列範例會重新部署名為 myResourceGroup 的資源群組中名為 myVM 的 VM。The following example redeploys the VM named myVM in the resource group named myResourceGroup. 使用您自己的值,如下所示︰Use your own values as follows:

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

使用傳統部署模型建立的 VMVMs created by using the Classic deployment model

重要

傳統 VM 將於 2023 年 3 月 1 日淘汰。Classic VMs will be retired on March 1, 2023.

如果您使用來自 ASM 的 IaaS 資源,請在 2023 年 3 月 1 日前完成移轉。If you use IaaS resources from ASM, please complete your migration by March 1, 2023. 我們鼓勵您及早切換,以利用 Azure Resource Manager 的許多功能增強功能。We encourage you to make the switch sooner to take advantage of the many feature enhancements in Azure Resource Manager.

如需詳細資訊,請參閱請於 2023 年 3 月 1 日之前將您的 IaaS 資源遷移至 Azure Resource ManagerFor more information, see Migrate your IaaS resources to Azure Resource Manager by March 1, 2023.

請嘗試下列步驟,來解決使用傳統部署模型所建立之 VM 中最常見的 SSH 連線失敗。Try these steps to resolve the most common SSH connection failures for VMs that were created by using the classic deployment model. 在每個步驟完成後,請嘗試重新連接至 VM。After each step, try reconnecting to the VM.

  • 透過 Azure 入口網站,重設遠端存取。Reset remote access from the Azure portal. 在 Azure 入口網站上選取您的 VM,然後選取 [重設遠端...]。On the Azure portal, select your VM and then select Reset Remote....

  • 重新啟動 VM。Restart the VM. Azure 入口網站上選取您的 VM,然後選取 [重新啟動]。On the Azure portal, select your VM and select Restart.

  • 將 VM 重新部署到新的 Azure 節點。Redeploy the VM to a new Azure node. 如需如何重新部署 VM 的資訊,請參閱將虛擬機器重新部署至新的 Azure 節點For information about how to redeploy a VM, see Redeploy virtual machine to new Azure node.

    此作業完成之後,暫時磁碟機資料將會遺失,且將會更新與虛擬機器相關聯的動態 IP 位址。After this operation finishes, ephemeral disk data will be lost and dynamic IP addresses that are associated with the virtual machine will be updated.

  • 請依循如何為 Linux 虛擬機器重設密碼或 SSH 中的指示進行,以:Follow the instructions in How to reset a password or SSH for Linux-based virtual machines to:

    • 重設密碼或 SSH 金鑰。Reset the password or SSH key.
    • 建立 sudo 使用者帳戶。Create a sudo user account.
    • 重設 SSH 組態。Reset the SSH configuration.
  • 檢查 VM 的資源健康狀態是否有任何平台問題。Check the VM's resource health for any platform issues.
    選取您的 VM 並向下切入 設定 > 檢查健康 情況。Select your VM and scroll down Settings > Check Health.

其他資源Additional resources