針對 Azure Linux VM 中的 SSH 連線問題進行疑難解答,因為許可權和擁有權問題

適用於:✔️ Linux VM

注意

本文所參考的 CentOS 是一種 Linux 發行版,且將到達生命周期結束(EOL)。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引

本文提供透過安全殼層連線到Linux虛擬機 (VM) 失敗之問題的解決方案,因為 RHEL 中的 /var/empty/sshd 目錄、SUSE 中的 /var/lib/empty 目錄,或 Ubuntu 中的 /var/run/sshd 目錄不存在,或它不是根使用者擁有,或它是群組可寫入或世界可寫入。

徵兆

當您透過 SSH 連線到 Linux 虛擬機(VM)時,聯機會失敗。 視 Linux 發行版而定,您可能會收到下列有關受影響目錄的錯誤訊息。

sudo tail /var/log/messages
sshd: /var/empty/sshd must be owned by root and not group or world-writable.  

原因

如果受影響的目錄不是根使用者所擁有,或它是群組可寫入或世界寫入,就可能發生此問題。

若要解決此問題,請使用下列其中一個解決方案:

解決方案 1:在線修復 VM

以下是離線修復 VM 的兩種方法:

使用序列主控台

  1. 從 Azure 入口網站 連線到 VM 的序列主控台

  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 入口網站 中,開啟 VM 的 [屬性] 視窗,以檢查代理程序狀態。 如果代理程式已啟用且具有 [就緒 ] 狀態,請遵循下列步驟來變更許可權:

  1. 移至 Azure 入口網站,找出您的 VM 設定,然後選取 [作業] 底下的 [執行命令]。

  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 的兩種方法:

使用 Azure Linux 自動修復 (ALAR)

Azure Linux 自動修復 (ALAR) 腳本是使用 Azure 虛擬機修復命令修復 Linux VM 中所述之 VM 修復延伸模組的一部分。

請遵循下列步驟,將手動脫機程式自動化:

注意

在下列步驟中,請據以取代 $RGNAME$VMNAME$USERNAME$PASSWORDrepairdiskcopy 值。

  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。 將和 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
    

使用手動方法

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

成功將OS磁碟連結至復原 VM 之後,請遵循詳細的 chroot 指示 ,將和 chroot 掛接至所連結 OS 磁碟的文件系統。 然後,依照使用 Azure Linux 自動修復(ALAR) 一節中的步驟 3 來解決許可權和擁有權問題。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。