嘗試連接到 Linux 虛擬機 (VM) 時,有多種原因可能會導致安全外殼 (SSH) 錯誤、SSH 連接失敗或被拒絕。 本文幫助用戶找出原因并更正問題。 可以使用 Azure 門戶、Azure CLI 或適用于 Linux 的 VM 訪問擴展來排查和解決連接問題。
Note
Azure 具有用于創建和處理資源的兩個不同的部署模型:Resource Manager 和經典。 這篇文章介紹了如何使用這兩種模型,但 Azure 建議大多數最新部署使用 Resource Manager 模型。
如果對本文中的任何內容需要更多幫助,可以聯系MSDN Azure 和 Stack Overflow 論壇上的 Azure 專家。 或者,也可以提交 Azure 支持事件。 請轉到Azure 支持站點并選擇“獲取支持”。 有關使用 Azure 支持的信息,請閱讀Azure 支持常見問題。
快速故障排除步驟
執行每個故障排除步驟后,請嘗試重新連接到 VM。
重置 SSH 配置。
重置用戶的憑據。
確認網絡安全組規則是否允許 SSH 流量。
確保有一條網絡安全組規則允許 SSH 流量(默認為 TCP 端口 22)。
在不使用 Azure 負載均衡器的情況下無法使用端口重定向/映射。
重啟 VM。
重新部署 VM。
繼續閱讀余下的內容,獲取更詳細的故障排除步驟和說明。
排查 SSH 連接問題的可用方法
可以使用以下方法之一重置憑據或 SSH 配置:
Azure 門戶- 如果需要快速重置 SSH 配置或 SSH 密鑰,并且沒有安裝 Azure 工具,則很適合使用此方法。
Azure CLI 2.0- 如果已打開命令行,則可以快速重置 SSH 配置或憑據。 還可以使用Azure CLI 1.0
Azure VMAccessForLinux 擴展- 創建和重復使用 json 定義文件來重置 SSH 配置或用戶憑據。
在執行每個故障排除步驟之后,請嘗試再次連接到 VM。 如果仍然無法連接,請嘗試下一步。
使用 Azure 門戶
在 Azure 門戶中,可以快速重置 SSH 配置或用戶憑據,無需在本地計算機上安裝任何工具。
在 Azure 門戶中選擇 VM。 向下滾動到“支持 + 故障排除”部分并選擇“重置密碼”,如以下示例中所示:
重置 SSH 配置
第一步是從“模式”下拉菜單中選擇“Reset configuration only”(如上面的屏幕截圖中所示),并單擊“重置”按鈕。 完成此操作后,再次嘗試訪問 VM。
重置用戶的 SSH 憑據
若要重置現有用戶的憑據,請從“模式”下拉菜單中選擇“Reset SSH public key”或“Reset password”,如上面的屏幕截圖中所示。 指定用戶名和 SSH 密鑰或新密碼,然后單擊“重置”按鈕。
還可以通過此菜單在 VM 上創建具有 sudo 權限的用戶。 輸入新用戶名和關聯的密碼或 SSH 密鑰,并單擊“重置”按鈕。
使用 Azure CLI 2.0
安裝最新的Azure CLI 2.0并使用az login登錄到 Azure 帳戶(如果尚未這樣做)。
Note
在 Azure 中國區使用 Azure CLI 2.0 之前,請先運行az cloud set -n AzureChinaCloud來改變云環境。如果想切回國際版 Azure,請再次運行az cloud set -n AzureCloud。
如果創建并上傳了自定義 Linux 磁盤映像,請確保已安裝Azure Linux 代理2.0.5 或更高版本。 在使用庫映像創建的 VM 上,系統已自動安裝并配置了此訪問擴展。
重置用戶的 SSH 憑據
以下示例使用az vm user update,在myResourceGroup中名為myVM的 VM 上, 將myUsername的憑據重置為myPassword中指定的值。 請如下所示使用自己的值:
Azure CLI復制
azvmuserupdate--resource-groupmyResourceGroup--namemyVM \--usernamemyUsername--passwordmyPassword
如果使用 SSH 密鑰身份驗證,可以重置給定用戶的 SSH 密鑰。 以下示例在myResourceGroup中名為myVM的 VM 上,使用az vm access set-linux-user更新存儲在~/.ssh/id_rsa.pub中的用戶名為myUsername的 SSH 密鑰。 請如下所示使用自己的值:
Azure CLI復制
azvmuserupdate--resource-groupmyResourceGroup--namemyVM \--usernamemyUsername--ssh-key-value~/.ssh/id_rsa.pub
使用 VMAccess 擴展
適用于 Linux 的 VM 訪問擴展可以讀入用于定義待執行操作的 json 文件。這些操作包括重置 SSHD、重置 SSH 密鑰或添加用戶。 仍要使用 Azure CLI 調用 VMAccess 擴展,但可以根據需要在多個 VM 上重復使用該 json 文件。 使用這種方法可以創建 json 文件存儲庫,然后,可以在給定的方案中調用這些文件。
重置 SSHD
創建包含以下內容的名為settings.json的文件:
JSON復制
{"reset_ssh":"True"}
使用 Azure CLI,并調用VMAccessForLinux擴展并指定 json 文件來重置 SSHD 連接。 以下示例使用az vm extension set,在myResourceGroup中名為myVM的 VM 上重置 SSHD。 請如下所示使用自己的值:
Azure CLI復制
azvmextensionset--resource-groupphilmea--vm-nameUbuntu \--nameVMAccessForLinux--publisherMicrosoft.OSTCExtensions--version1.2--settingssettings.json
重置用戶的 SSH 憑據
如果 SSHD 看上去運行正常,可以重置給定用戶的憑據。 若要重置用戶的密碼,請創建名為settings.json的文件。 以下示例將myUsername的憑據重置為myPassword中指定的值。 在settings.json文件中使用自己的值輸入以下行:
JSON復制
{"username":"myUsername","password":"myPassword"}
若要重置用戶的 SSH 密鑰,請先創建名為settings.json的文件。 以下示例在myResourceGroup中名為myVM的 VM 上,將myUsername的憑據重置為myPassword中指定的值。 在settings.json文件中使用自己的值輸入以下行:
JSON復制
{"username":"myUsername","ssh_key":"mySSHKey"}
創建 json 文件之后,使用 Azure CLI 調用VMAccessForLinux擴展并指定 json 文件來重置 SSH 用戶憑據。 以下示例重置myResourceGroup中名為myVM的 VM 上的憑據。 請如下所示使用自己的值:
Azure CLI復制
azvmextensionset--resource-groupphilmea--vm-nameUbuntu \--nameVMAccessForLinux--publisherMicrosoft.OSTCExtensions--version1.2--settingssettings.json
使用 Azure CLI 1.0
安裝 Azure CLI 1.0 并連接到 Azure 訂閱(如果尚未這樣做)。 確保按如下所示使用 Resource Manager 模式:
Azure CLI復制
azureconfigmodearm
如果創建并上傳了自定義 Linux 磁盤映像,請確保已安裝Azure Linux 代理2.0.5 或更高版本。 在使用庫映像創建的 VM 上,系統已自動安裝并配置了此訪問擴展。
重置 SSH 配置
SSHD 配置本身可能有誤或服務遇到錯誤。 可以重置 SSHD 以確保 SSH 配置本身是有效的。 要執行的第一個故障排除步驟應該是重置 SSHD。
以下示例重置myResourceGroup資源組中名為myVM的 VM 上的 SSHD。 請使用自己的 VM 和資源組名稱,如下所示:
Azure CLI復制
azurevmreset-access--resource-groupmyResourceGroup--namemyVM \--reset-ssh
重置用戶的 SSH 憑據
如果 SSHD 看上去運行正常,可以重置給定用戶的密碼。 以下示例在myResourceGroup中名為myVM的 VM 上,將myUsername的憑據重置為myPassword中指定的值。 請如下所示使用自己的值:
Azure CLI復制
azurevmreset-access--resource-groupmyResourceGroup--namemyVM \--user-namemyUsername--passwordmyPassword
如果使用 SSH 密鑰身份驗證,可以重置給定用戶的 SSH 密鑰。 以下示例在myResourceGroup中名為myVM的 VM 上,更新~/.ssh/id_rsa.pub中為用戶myUsername存儲的 SSH 密鑰。 請如下所示使用自己的值:
Azure CLI復制
azurevmreset-access--resource-groupmyResourceGroup--namemyVM \--user-namemyUsername--ssh-key-file~/.ssh/id_rsa.pub
重新啟動 VM
如果已重置 SSH 配置和用戶憑據,或者在執行此操作期間遇到錯誤,可以嘗試重新啟動 VM 來解決基本的計算問題。
Azure 門戶
若要使用 Azure 門戶重新啟動 VM,請選擇 VM,然后單擊“重新啟動”按鈕,如以下示例中所示:
Azure CLI 1.0
以下示例重新啟動myResourceGroup資源組中名為myVM的 VM。 請如下所示使用自己的值:
Azure CLI復制
azurevmrestart--resource-groupmyResourceGroup--namemyVM
Azure CLI 2.0
以下示例使用az vm restart重新啟動名為myResourceGroup的資源組中名為myVM的 VM。 請如下所示使用自己的值:
Azure CLI復制
azvmrestart--resource-groupmyResourceGroup--namemyVM
重新部署 VM
可以將 VM 重新部署到 Azure 中的另一個節點,這可能可以更正任何潛在的網絡問題。 有關重新部署 VM 的信息,請參閱將虛擬機重新部署到新的 Azure 節點。
Note
完成此操作后,臨時磁盤數據會丟失,并且系統會更新與虛擬機關聯的動態 IP 地址。
Azure 門戶
若要使用 Azure 門戶重新部署 VM,請選擇 VM,然后向下滾動到“支持 + 故障排除”部分。 Click theRedeploybutton as in the following example:
Azure CLI 1.0
以下示例重新部署myResourceGroup資源組中名為myVM的 VM。 請如下所示使用自己的值:
Azure CLI復制
azurevmredeploy--resource-groupmyResourceGroup--namemyVM
Azure CLI 2.0
以下示例使用az vm redeploy重新部署名為myResourceGroup的資源組中名為myVM的 VM。 請如下所示使用自己的值:
Azure CLI復制
azvmredeploy--resource-groupmyResourceGroup--namemyVM
使用經典部署模型創建的 VM
若要解決使用經典部署模型創建的 VM 中最常見的 SSH 連接失敗問題,請嘗試以下步驟。 執行每個步驟后,請嘗試重新連接到 VM。
從Azure 門戶重置遠程訪問。 在 Azure 門戶中選擇 VM,然后單擊“重置遠程...”按鈕。
重啟 VM。 在Azure 門戶中選擇 VM,然后單擊“重新啟動”按鈕。
將 VM 重新部署到新的 Azure 節點。 有關如何重新部署 VM 的信息,請參閱將虛擬機重新部署到新的 Azure 節點。
完成此操作后,臨時磁盤數據會丟失,并且系統會更新與虛擬機關聯的動態 IP 地址。
按照如何為基于 Linux 的虛擬機重置密碼或 SSH中的說明執行以下操作:
重置密碼或 SSH 密鑰。
創建sudo用戶帳戶。
重置 SSH 配置。
檢查 VM 的資源運行狀況,了解是否存在任何平臺問題。
選擇 VM 并向下滾動到“設置” > “檢查運行狀況”。
其他資源
如果在執行后續步驟之后仍然無法通過 SSH 連接到 VM,請參閱更詳細的故障排除步驟,查看其他可以解決問題的步驟。
有關對應用程序訪問進行故障排除的詳細信息,請參閱對在 Azure 虛擬機上運行的應用程序的訪問進行故障排除
有關對使用經典部署模型創建的虛擬機進行故障排除的詳細信息,請參閱如何為基于 Linux 的虛擬機重置密碼或 SSH。
立即訪問http://market.azure.cn