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.
- Risoluzione 2: ripristinare la macchina virtuale offline.
Risoluzione 1: Ripristinare la macchina virtuale online
Ecco due metodi per ripristinare la macchina virtuale offline:
Usa la console seriale
Connettersi alla console seriale della macchina virtuale da portale di Azure.
Accedere alla macchina virtuale usando un account amministrativo locale e le credenziali o la password corrispondenti.
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:
Passare alla portale di Azure, individuare le impostazioni della macchina virtuale e quindi selezionare Esegui comando in Operazioni.
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
- 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 $RGNAME
i valori , $VMNAME
$USERNAME
, , $PASSWORD
e repairdiskcopy
di conseguenza.
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
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.
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
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:
- Collegare il disco del sistema operativo a una macchina virtuale di ripristino usando il portale di Azure.
- Collegare il disco del sistema operativo a una macchina virtuale di ripristino usando l'interfaccia della riga di comando di Azure.
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.