適用於:✔️ Linux VM
總結
本文提供解決用安全殼層(SSH)連接至 Linux 虛擬機器(VM)失敗的問題的方法。問題可能是 RHEL 中的 /var/empty/sshd 目錄、SUSE 中的 /var/lib/empty 目錄,或 Ubuntu 中的 /var/run/sshd 目錄不存在,或這些目錄並非由 root 使用者擁有,或者被設為群組可寫或世界可寫。
這很重要
New! 試試 VM assist 來解決主要問題。
我們建議您對 Windows 使用
如果您在虛擬機上遇到效能問題,請先執行這些工具,再聯絡 Microsoft 支援服務。
徵狀
當您透過 SSH 連線到 Linux 虛擬機(VM)時,聯機會失敗。 視 Linux 發行版而定,您可能會收到下列有關受影響目錄的錯誤訊息。
sudo tail /var/log/messages
sshd: /var/empty/sshd must be owned by root and not group or world-writable.
原因
如果受影響的目錄不是 root 使用者所擁有,或它是群組可寫入或全域可寫入,就可能發生此問題。
若要解決此問題,請使用下列其中一個解決方案:
解決方案 1:在線修復 VM
以下是離線修復 VM 的兩種方法:
使用序列主控台
從Azure入口連接到虛擬機的串列主控台。
使用本機系統管理帳戶及其對應的認證或密碼登入 VM。
執行下列命令來解決權限和所有權問題:
使用「執行命令」擴充功能
備註
此方法依賴 Azure Linux VM 代理程式(waagent)。 因此,請確定代理程式已安裝在 VM 中,且其服務正在執行中。
在Azure入口網站中,開啟虛擬機的 Properties視窗以查看代理狀態。 如果代理程式已啟用且具有 [就緒 ] 狀態,請遵循下列步驟來變更許可權:
到Azure入口網站,找到你的虛擬機設定,然後在Operations下選擇Run Command。
執行下列殼層腳本,請選取 RunShellScript>執行:
- 腳本執行完成之後,輸出控制台視窗會顯示「啟用成功」訊息。
如果您可以透過 SSH 連線到 VM,而且想要分析 Run-command 腳本執行的詳細數據,請檢查 /var/log/azure/run-command 目錄中的 handler.log 檔案。
解決方案 2:離線修復 VM
備註
- 如果 VM 序列主控台存取無法使用,且 waagent 尚未就緒,請使用此解決方案。
- 在Ubuntu中 ,/var/run/sshd 目錄會在記憶體中執行。 重新啟動 VM 也會修正此問題。 因此,不需要Ubuntu VM中的離線疑難解答。
以下是離線修復 VM 的兩種方法:
使用 az vm repair
az vm repair 是 Azure CLI 的 vm-repair 擴充功能的一部分,詳見 使用 Azure 虛擬機修復指令 來修復 Linux 虛擬機。
請遵循下列步驟,將手動離線流程自動化:
備註
在下列步驟中,請據以取代 $RGNAME、 $VMNAME、 $USERNAME、 $PASSWORD和 repairdiskcopy 值。
使用 az vm repair create 命令來建立修復 VM。 修復 VM 有連結問題 VM 的 OS 磁碟復本。
az vm repair create --verbose -g $RGNAME -n $VMNAME --repair-username $USERNAME --repair-password $PASSWORD --copy-disk-name repairdiskcopy登入修復 VM。 將 OS 磁碟的附加副本掛載到文件系統,然後使用 chroot。 請遵循詳細的 chroot 指示。
執行下列命令來解決權限和擁有權問題:
套用變更之後,請執行下列
az vm repair restore命令,以使用原始 VM 執行自動 OS 磁碟交換。az vm repair restore --verbose -g $RGNAME -n $VMNAME
使用手動方法
如果序列主控台和 az vm repair 方法都不適用於您或失敗,則必須手動執行修復。 請遵循下列步驟,將 OS 磁碟手動連結至復原 VM,並將 OS 磁碟交換回原始 VM:
- 將作業系統磁碟附加到復原虛擬機,使用 Azure 入口網站。
使用 Azure CLI.
成功將 OS 磁碟連結至復原 VM 之後,請遵循詳細的 chroot 指示,將該 OS 磁碟的檔案系統掛載並切換到 chroot。 然後,遵循使用 az vm repair 區段中的步驟 3 來解決許可權和擁有權問題。