Risolvere i problemi di connessione SSH in una VM Linux di Azure a causa di problemi di autorizzazioni e proprietà

Si applica a: ✔️ macchine virtuali Linux

Sommario

Questo articolo fornisce soluzioni a un problema in cui la connessione a una macchina virtuale Linux (VM) tramite Secure Shell (SSH) ha esito negativo perché la directory /var/empty/sshd in RHEL, la directory /var/lib/empty in SUSE, o la directory /var/run/sshd in Ubuntu, non esiste, non è di proprietà dell'utente root, o è scrivibile dal gruppo o da chiunque.

Importante

New! Provare ad usare Assistente VM per risolvere le principali problematiche. È consigliabile eseguire VM assist for Windows o VM assist for Linux. Questi strumenti di diagnostica basati su script consentono di identificare i problemi comuni che influiscono sull'agente guest della macchina virtuale Azure e sull'integrità complessiva delle macchine virtuali.

Se si verificano problemi di prestazioni nelle macchine virtuali, eseguire questi strumenti prima di contattare supporto tecnico Microsoft.

Sintomi

Quando ci si connette a una macchina virtuale Linux tramite SSH, la connessione non riesce. È possibile che venga visualizzato il seguente messaggio di errore relativo alla directory interessata, a seconda della distribuzione linux.

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

Causa

Questo problema può verificarsi se la directory interessata non è di proprietà dell'utente root o se è scrivibile dal gruppo o globalmente.

Per risolvere il problema, usare una delle soluzioni seguenti:

Risoluzione 1: Ripristinare la macchina virtuale online

Ecco due metodi per ripristinare la macchina virtuale offline:

Usa la console seriale

  1. Connettersi a la console seriale della macchina virtuale dal portale di Azure.

  2. Accedere alla macchina virtuale usando un account amministrativo locale e le credenziali o la password corrispondenti.

  3. Eseguire i comandi seguenti per risolvere il problema di autorizzazione e proprietà:

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

Usare l'estensione "Esegui comando"

Nota

Questo metodo si basa sull'agente di macchine virtuali Linux Azure (waagent). Assicurarsi pertanto che l'agente sia installato nella macchina virtuale e che il relativo servizio sia in esecuzione.

Nel portale di Azure aprire la finestra Properties della macchina virtuale per controllare lo stato dell'agente. Se l'agente è abilitato e ha lo stato Pronto , seguire questa procedura per modificare l'autorizzazione:

  1. Passare al portale di Azure, individuare le impostazioni della macchina virtuale e quindi selezionare Esegui comando in Operations.

  2. Eseguire il seguente script della shell selezionando RunShellScript>Run:

    #!/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. Al termine dell'esecuzione dello script, nella finestra della console di output verrà visualizzato un messaggio "Abilita completato".

Se è possibile connettersi alla macchina virtuale tramite SSH e si vogliono analizzare i dettagli dell'esecuzione dello script Run-command, esaminare il file handler.log nella directory /var/log/azure/run-command .

Risoluzione 2: Ripristinare la macchina virtuale offline

Nota

  • Usare questa risoluzione se l'accesso alla console seriale della macchina virtuale non è disponibile e waagent non è pronto.
  • In Ubuntu la directory /var/run/sshd viene eseguita in memoria. Il riavvio della macchina virtuale risolverà anche il problema. Pertanto, la risoluzione dei problemi offline nelle macchine virtuali Ubuntu non è necessaria.

Ecco due metodi per ripristinare la macchina virtuale offline:

Utilizzare az vm repair

Il az vm repair è parte dell'estensione vm-repair per l'interfaccia della riga di comando di Azure, è descritto in Riparare una VM Linux utilizzando i comandi di riparazione della macchina virtuale di Azure.

Seguire questa procedura per automatizzare il processo offline manuale:

Nota

Nei passaggi seguenti, sostituire i valori $RGNAME, $VMNAME, $USERNAME, $PASSWORD e repairdiskcopy di conseguenza.

  1. Usare il comando az vm repair create per creare una macchina virtuale di ripristino. La macchina virtuale di ripristino ha una copia del disco del sistema operativo per la macchina virtuale problematica collegata.

    az vm repair create --verbose -g $RGNAME -n $VMNAME --repair-username $USERNAME --repair-password $PASSWORD --copy-disk-name repairdiskcopy
    
  2. Accedere alla macchina virtuale di ripristino. Montare e chroot nel file system della copia collegata del disco del sistema operativo. Seguire le istruzioni dettagliate di chroot.

  3. Eseguire i comandi seguenti per risolvere i problemi di autorizzazione e proprietà:

    mkdir -p /var/empty/sshd
    chmod 755 /var/empty/sshd
    chown root:root /var/empty/sshd
    
  4. Dopo aver applicato le modifiche, eseguire il comando seguente az vm repair restore per eseguire uno scambio automatico del disco del sistema operativo con la macchina virtuale originale.

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

Usare il metodo manuale

Se né la console seriale né l'approccio az vm repair si applicano a te o falliscono, il ripristino dovrà essere eseguito manualmente. Seguire questa procedura per collegare manualmente il disco del sistema operativo a una macchina virtuale di ripristino e scambiare il disco del sistema operativo nella macchina virtuale originale:

Una volta collegato correttamente il disco del sistema operativo alla macchina virtuale di ripristino, seguire le istruzioni per eseguire il chroot dettagliate per montare ed eseguire il chroot sui file system del disco del sistema operativo collegato. Seguire quindi il passaggio 3 nella sezione Usare az vm repair per risolvere i problemi di autorizzazione e proprietà.