因權限與所有權問題,在 Azure Linux VM 中排除 SSH 連線問題

適用於:✔️ Linux VM

總結

本文提供解決用安全殼層(SSH)連接至 Linux 虛擬機器(VM)失敗的問題的方法。問題可能是 RHEL 中的 /var/empty/sshd 目錄、SUSE 中的 /var/lib/empty 目錄,或 Ubuntu 中的 /var/run/sshd 目錄不存在,或這些目錄並非由 root 使用者擁有,或者被設為群組可寫或世界可寫。

這很重要

New! 試試 VM assist 來解決主要問題。 我們建議您對 Windows 使用 VM 協助,或對 Linux 使用 VM 協助。 這些基於腳本的診斷工具能幫助你辨識影響 Azure VM 訪客代理及整體虛擬機健康狀況的常見問題。

如果您在虛擬機上遇到效能問題,請先執行這些工具,再聯絡 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 的兩種方法:

使用序列主控台

  1. 從Azure入口連接到虛擬機的串列主控台。

  2. 使用本機系統管理帳戶及其對應的認證或密碼登入 VM。

  3. 執行下列命令來解決權限和所有權問題:

    sudo mkdir -p /var/empty/sshd
    sudo chmod 755 /var/empty/sshd
    sudo chown root:root /var/empty/sshd
    

使用「執行命令」擴充功能

備註

此方法依賴 Azure Linux VM 代理程式(waagent)。 因此,請確定代理程式已安裝在 VM 中,且其服務正在執行中。

在Azure入口網站中,開啟虛擬機的 Properties視窗以查看代理狀態。 如果代理程式已啟用且具有 [就緒 ] 狀態,請遵循下列步驟來變更許可權:

  1. 到Azure入口網站,找到你的虛擬機設定,然後在Operations下選擇Run Command。

  2. 執行下列殼層腳本,請選取 RunShellScript>執行:

    #!/bin/bash
    
    #Script to change permissions on a file
    mkdir -p /var/empty/sshd;chmod 755 /var/empty/sshd;chown root:root /var/empty/sshd
    

  1. 腳本執行完成之後,輸出控制台視窗會顯示「啟用成功」訊息。

如果您可以透過 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 值。

  1. 使用 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
    
  2. 登入修復 VM。 將 OS 磁碟的附加副本掛載到文件系統,然後使用 chroot。 請遵循詳細的 chroot 指示。

  3. 執行下列命令來解決權限和擁有權問題:

    mkdir -p /var/empty/sshd
    chmod 755 /var/empty/sshd
    chown root:root /var/empty/sshd
    
  4. 套用變更之後,請執行下列 az vm repair restore 命令,以使用原始 VM 執行自動 OS 磁碟交換。

    az vm repair restore --verbose -g $RGNAME -n $VMNAME
    

使用手動方法

如果序列主控台和 az vm repair 方法都不適用於您或失敗,則必須手動執行修復。 請遵循下列步驟,將 OS 磁碟手動連結至復原 VM,並將 OS 磁碟交換回原始 VM:

成功將 OS 磁碟連結至復原 VM 之後,請遵循詳細的 chroot 指示,將該 OS 磁碟的檔案系統掛載並切換到 chroot。 然後,遵循使用 az vm repair 區段中的步驟 3 來解決許可權和擁有權問題。