Share via


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

注意事項

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

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

徵狀

當您透過 SSH 連線到 (VM) 的 Linux 虛擬機時,聯機會失敗。 視您的 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,而且想要分析執行命令腳本執行的詳細數據,請檢查 /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$USERNAME$VMNAME、、 $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 指示

  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:

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

與我們連絡,以取得說明

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