Condividi tramite


Risolvere i problemi di connessione SSH nella macchina virtuale Linux di Azure a causa di problemi di autorizzazione e proprietà

Si applica a: ✔️ macchine virtuali di Linux

Note

CentOS a cui si fa riferimento in questo articolo è una distribuzione Linux e raggiungerà End Of Life (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per altre informazioni, vedere Indicazioni sulla fine della vita di CentOS.

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 o non è di proprietà dell'utente radice o è scrivibile nel gruppo o in tutto il mondo.

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 radice o se è scrivibile in gruppi o in tutto il mondo.

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 alla console seriale della macchina virtuale da 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"

Note

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

Nella portale di Azure aprire la finestra Proprietà 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 alla portale di Azure, individuare le impostazioni della macchina virtuale e quindi selezionare Esegui comando in Operazioni.

  2. Eseguire lo script della shell seguente selezionando RunShellScript Run (Esegui 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. 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

Note

  • 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:

Usare Azure Linux Auto Repair (ALAR)

Gli script di ripristino automatico di Azure Linux (ALAR) fanno parte dell'estensione di ripristino della macchina virtuale descritta in Ripristinare una macchina virtuale Linux usando i comandi di ripristino della macchina virtuale di Azure.

Seguire questa procedura per automatizzare il processo offline manuale:

Note

Nei passaggi seguenti sostituire $RGNAMEi valori , $VMNAME$USERNAME, , $PASSWORDe 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 la console seriale e l'approccio ALAR non si applicano o non riescono, il ripristino deve 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 ripristino automatico di Azure Linux (ALAR) per risolvere i problemi di autorizzazione e proprietà.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.