針對通過 SSH 連線到 Azure Linux VM 時發生的失敗、錯誤或被拒絕問題進行故障排除...

weixin_34214500發表於2017-09-29

嘗試連線到 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。 向下滾動到“支援 + 故障排除”部分並選擇“重置密碼”,如以下示例中所示:

5922841-a68a862e12b77151.png

重置 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,然後單擊“重新啟動”按鈕,如以下示例中所示:

5922841-b0a0f3fbac02eb0c.png

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:

5922841-e1da22ab6d5e11ed.png

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

相關文章