Risolvere i problemi delle connessioni SSH a una macchina virtuale di Azure Linux che non riescono, si interrompono o vengono rifiutate

Si applica a: ✔️ macchine virtuali Linux

Questo articolo consente di individuare e correggere i problemi che si verificano a causa di errori di Secure Shell (SSH), errori di connessione SSH o SSH rifiutato quando si tenta di connettersi a una macchina virtuale (VM) Linux. È possibile usare il portale di Azure, l'interfaccia della riga di comando di Azure o l'estensione di accesso alle macchine virtuali per Linux per risolvere i problemi di connessione.

Note

Questo articolo è stato utile? Diamo importanza al contributo degli utenti. Usare il pulsante Feedback in questa pagina per comunicare se questo articolo è stato utile o come possiamo migliorarlo.

Passaggi rapidi per la risoluzione dei problemi

Dopo ogni passaggio per la risoluzione dei problemi, prova a riconnetterti alla VM.

  1. Ripristinare la configurazione SSH.
  2. Reimpostare le credenziali dell'utente.
  3. Verificare che le regole del gruppo di sicurezza di rete consentano il traffico SSH e l'assegnazione dei ruoli.
    • Assicurati che esista una regola del gruppo di sicurezza di rete per consentire il traffico SSH (per impostazione predefinita, porta TCP 22).
    • Non è possibile usare il reindirizzamento/mapping delle porte senza usare un servizio di bilanciamento del carico di Azure.
    • Se si utilizza Microsoft Entra ID per gestire gli accessi SSH, all'utente deve essere assegnato il ruolo Accesso amministratore macchina virtuale o Accesso utente macchina virtuale nel gruppo di risorse che contiene la macchina virtuale e le risorse associate. In caso contrario, verrà restituito l'errore "Autorizzazione negata (chiave pubblica)". Per ulteriori informazioni, consultare Configurare le assegnazioni dei ruoli per la macchina virtuale che utilizza l'accesso Microsoft Entra.
  4. Controlla l'integrità della risorsa VM.
  5. Riavviare la macchina virtuale.
  6. Ridistribuire la macchina virtuale.

Continua a leggere per istruzioni e passaggi più dettagliati per la risoluzione dei problemi.

Metodi disponibili per la risoluzione dei problemi di connessione SSH

Puoi reimpostare le credenziali, la configurazione SSH o risolvere i problemi relativi allo stato del servizio SSH utilizzando uno dei seguenti metodi:

  • Portale di Azure: ideale se è necessario reimpostare rapidamente la configurazione o la chiave SSH e non si dispone degli strumenti di Azure.
  • Console seriale della macchina virtuale di Azure: la console seriale della macchina virtuale funzionerà indipendentemente dalla configurazione SSH e fornirà una console interattiva per la macchina virtuale. In effetti, le situazioni "non posso SSH" sono specificamente ciò che la console seriale è stata progettata per aiutare a risolvere. Maggiori dettagli di seguito.
  • Utilizzare Esegui comando tramite il Portale di Azure: è possibile eseguire comandi di base utilizzando la funzionalità Esegui comando tramite il Portale di Azure. L'output verrà restituito al portale.
  • Interfaccia della riga di comando di Azure: se si è già alla riga di comando, ripristinare rapidamente la configurazione o le credenziali SSH.
  • Estensione Azure VMAccessForLinux: creare e riutilizzare il file di definizione json per reimpostare la configurazione SSH o le credenziali utente.

Dopo ogni passaggio per la risoluzione dei problemi, prova a connetterti nuovamente alla VM. Se ancora non riesci a connetterti, prova il passaggio successivo.

Usare il portale di Azure

Il portale di Azure offre un modo rapido per reimpostare la configurazione SSH o le credenziali utente senza installare strumenti nel computer locale.

Per iniziare, seleziona la tua macchina virtuale nel portale di Azure. Scorri verso il basso fino alla sezione Aiuto e seleziona Reimposta password come nell'esempio seguente:

Screenshot per reimpostare la configurazione SSH o le credenziali nella portale di Azure.

Ripristina la configurazione SSH

Per reimpostare la configurazione SSH, selezionare Reset configuration only nella sezione Modalità come nella schermata precedente, quindi selezionare Aggiorna. Una volta completata questa azione, prova ad accedere nuovamente alla tua VM.

Reimposta le credenziali SSH per un utente

Per reimpostare le credenziali di un utente esistente, selezionare Reset SSH public key o Reset password nella sezione Modalità come nella schermata precedente. Specificare il nome utente e una chiave SSH o una nuova password, quindi selezionare Aggiorna.

Puoi anche creare un utente con privilegi sudo sulla VM da questo menu. Immettere un nuovo nome utente e la password associata o la chiave SSH, quindi selezionare Aggiorna.

Controlla le regole di sicurezza

Utilizza la verifica del flusso IP per confermare se una regola in un gruppo di sicurezza di rete sta bloccando il traffico da o verso una macchina virtuale. È inoltre possibile esaminare le regole del gruppo di sicurezza effettive per assicurarsi che la regola NSG "Consenti" in ingresso esista e abbia la priorità per la porta SSH (impostazione predefinita 22). Per altre informazioni, vedere Uso di regole di sicurezza effettive per risolvere i problemi di flusso del traffico delle macchine virtuali.

Controlla il percorso

Utilizza la funzionalità Next hop di Network Watcher per confermare che un instradamento non impedisce l'instradamento del traffico verso o da una macchina virtuale. È inoltre possibile rivedere gli instradamenti effettivi per visualizzare tutti gli instradamenti effettivi per un'interfaccia di rete. Per ulteriori informazioni, consulta Utilizzo di route efficaci per la risoluzione dei problemi relativi al flusso del traffico VM.

Usare la console seriale della macchina virtuale di Azure

La Console seriale della macchina virtuale di Azure fornisce l'accesso a una console basata su testo per le macchine virtuali Linux. Puoi utilizzare la console per risolvere i problemi della tua connessione SSH in una shell interattiva. Assicurati di aver soddisfatto i prerequisiti per l'utilizzo della console seriale e prova i comandi seguenti per risolvere ulteriormente i problemi di connettività SSH.

Verificare che il servizio SSH sia in esecuzione

Per verificare lo stato del servizio, utilizzare il seguente comando, disponibile nella maggior parte delle distribuzioni Linux attuali:

sudo systemctl status sshd.service

Vedere il seguente esempio di output. Controllare lo stato del servizio dalla riga Active dell'output. L'output mostra anche la porta e gli indirizzi IP in ascolto.

user@hostname:~$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-23 17:44:36 UTC; 1 day 3h ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 829 (sshd)
      Tasks: 1 (limit: 9535)
     Memory: 5.1M
     CGroup: /system.slice/ssh.service
             └─829 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

Jun 23 17:44:35 ubu2004 systemd[1]: Starting OpenBSD Secure Shell server...
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on 0.0.0.0 port 22.
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on :: port 22.
Jun 23 17:44:36 ubu2004 systemd[1]: Started OpenBSD Secure Shell server.

Se questo comando non è disponibile o restituisce risultati imprevisti, utilizzare altri comandi disponibili. È possibile utilizzare il comando ss come root o il comando sudo per verificare se il servizio SSH è in esecuzione sulla macchina virtuale.

L'esempio seguente mostra come eseguire il comando ss tramite sudo:

sudo ss --listen --tcp --process --numeric | grep sshd

Note

Si consiglia il comando ss perché il comando netstat è deprecato e non sempre disponibile nelle distribuzioni moderne.

Se c'è qualche output, SSH è attivo e funzionante. Vedere il seguente esempio di output:

$ sudo ss -ltpn | grep sshd
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=829,fd=3))
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=829,fd=4))

-ltpn è la forma abbreviata degli argomenti --listen --tcp --process –numeric. L'output mostra che il processo SSHD 829 è in ascolto su entrambi gli indirizzi IPv4 e IPv6.

Controllare su quale porta è in esecuzione SSH

L'output del comando sopra mostra che il processo SSHD è in ascolto sulla porta 22. Quando il processo SSHD è configurato per essere eseguito su un'altra porta, la porta verrà visualizzata nell'output. Per verificare se la modifica è stata apportata nel file di configurazione standard, esaminare il file di configurazione predefinito, /etc/ssh/sshd_config utilizzando uno dei seguenti comandi:

grep -i port /etc/ssh/sshd_config

o

grep -i listen /etc/ssh/sshd_config

L'output sarà simile al seguente:

Port 22

Qualsiasi riga che inizia con # nell'output è un commento e può essere tranquillamente ignorata. Se non viene restituito nulla o le righe sono commenti, viene utilizzata la configurazione predefinita. La configurazione predefinita prevede l'ascolto di tutti gli indirizzi IP del sistema, sulla porta 22.

Utilizzare Esegui comando nel Portale di Azure

Se non sei in grado di eseguire comandi tramite la console seriale, ad esempio quando vengono utilizzate solo chiavi SSH per l'autenticazione, è possibile utilizzare la funzione Esegui comando per inviare comandi e visualizzare l'output. Tutti i comandi eseguiti in precedenza dalla console seriale possono essere eseguiti in modo non interattivo nella sezione Esegui comando nel portale di Azure. L'output verrà restituito al portale di Azure. Non è necessario utilizzare sudo per eseguire i comandi nel contesto Esegui comando.

Usare l'interfaccia della riga di comando di Azure

Se non è ancora stato fatto, installare l'ultima interfaccia della riga di comando di Azure e accedere a un account di Azure usando az login.

Se è stata creata e caricata un'immagine disco Linux personalizzata, assicurarsi che sia installato Agente Linux di Microsoft Azure versione 2.0.5 o successiva. Per le VM create utilizzando le immagini della Galleria, questa estensione di accesso è già installata e configurata per te.

Ripristina la configurazione SSH

Inizialmente puoi provare a reimpostare la configurazione SSH sui valori predefiniti e riavviare il server SSH sulla VM. Ciò non modifica il nome dell'account utente, la password o le chiavi SSH. L'esempio seguente utilizza az vm user reset-ssh per reimpostare la configurazione SSH sulla macchina virtuale denominata myVM in myResourceGroup. Usa i tuoi valori come segue:

az vm user reset-ssh --resource-group myResourceGroup --name myVM

Reimposta le credenziali SSH per un utente

L'esempio seguente utilizza az vm user update per reimpostare le credenziali di myUsername al valore specificato in myPassword, sulla macchina virtuale denominata myVM in myResourceGroup. Usa i tuoi valori come segue:

az vm user update --resource-group myResourceGroup --name myVM \
     --username myUsername --password myPassword

Se si utilizza l'autenticazione con chiave SSH, è possibile reimpostare la chiave SSH per un determinato utente. L'esempio seguente utilizza az vm access set-linux-user per aggiornare la chiave SSH memorizzata in ~/.ssh/id_rsa.pub per l'utente denominato myUsername, sulla macchina virtuale denominata myVM in myResourceGroup. Usa i tuoi valori come segue:

az vm user update --resource-group myResourceGroup --name myVM \
    --username myUsername --ssh-key-value ~/.ssh/id_rsa.pub

Utilizzare l'estensione VMAccess

L'estensione VMAccess per Linux è in grado di leggere un file json che definisce le azioni da eseguire. Queste azioni includono il ripristino dell'SSHD, il ripristino di una chiave SSH o l'aggiunta di un utente. È ancora possibile utilizzare l'interfaccia della riga di comando di Azure per chiamare l'estensione VMAccess, ma è possibile riutilizzare i file json su più macchine virtuali, se necessario. Questo approccio consente di creare un repository di file json che possono quindi essere richiamati per determinati scenari.

Ripristina SSHD

Creare un file denominato settings.json con il seguente contenuto:

{
    "reset_ssh":True
}

Utilizzando l'interfaccia della riga di comando di Azure, è possibile chiamare l'estensione VMAccessForLinux per ripristinare la connessione SSHD specificando il file json. L'esempio seguente utilizza az vm extension set per ripristinare SSHD sulla macchina virtuale denominata myVM in myResourceGroup. Usa i tuoi valori come segue:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Reimposta le credenziali SSH per un utente

Se l'SSHD sembra funzionare correttamente, è possibile reimpostare le credenziali per un utente giver. Per reimpostare la password di un utente, creare un file denominato settings.json. L'esempio seguente reimposta le credenziali per myUsername al valore specificato in myPassword. Inserire le seguenti righe nel file settings.json, utilizzando i propri valori:

{
    "username":"myUsername", "password":"myPassword"
}

Oppure, per reimpostare la chiave SSH di un utente, creare prima un file denominato settings.json. L'esempio seguente reimposta le credenziali per myUsername al valore specificato in myPassword, sulla macchina virtuale denominata myVM in myResourceGroup. Inserire le seguenti righe nel file settings.json, utilizzando i propri valori:

{
    "username":"myUsername", "ssh_key":"mySSHKey"
}

Dopo aver creato il file json, utilizzare l'interfaccia della riga di comando di Azure per chiamare l'estensione VMAccessForLinux e reimpostare le credenziali utente SSH specificando il file json. L'esempio seguente reimposta le credenziali sulla macchina virtuale denominata myVM in myResourceGroup. Usa i tuoi valori come segue:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Ripristina la configurazione SSH

La stessa configurazione SSHD potrebbe essere configurata in modo errato o il servizio ha riscontrato un errore. È possibile ripristinare l'SSHD per assicurarsi che la configurazione SSH sia valida. Il ripristino di SSHD dovrebbe essere il primo passo per la risoluzione dei problemi.

L'esempio seguente ripristina l'SSHD su una macchina virtuale denominata myVM nel gruppo di risorse denominato myResourceGroup. Usa i tuoi nomi di macchine virtuali e gruppi di risorse come segue:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --reset-ssh

Reimposta le credenziali SSH per un utente

Se l'SSHD sembra funzionare correttamente, è possibile reimpostare la password per l'utente giver. L'esempio seguente reimposta le credenziali per myUsername al valore specificato in myPassword, sulla macchina virtuale denominata myVM in myResourceGroup. Usa i tuoi valori come segue:

azure vm reset-access --resource-group myResourceGroup --name myVM \
     --user-name myUsername --password myPassword

Se si utilizza l'autenticazione con chiave SSH, è possibile reimpostare la chiave SSH per un determinato utente. L'esempio seguente aggiorna la chiave SSH memorizzata in ~/.ssh/id_rsa.pub per l'utente denominato myUsername, sulla macchina virtuale denominata myVM in myResourceGroup. Usa i tuoi valori come segue:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --user-name myUsername --ssh-key-file ~/.ssh/id_rsa.pub

Riavvia una macchina virtuale

Se la configurazione SSH e le credenziali utente sono state ripristinate o si è verificato un errore, è possibile provare a riavviare la macchina virtuale per risolvere i problemi di calcolo sottostanti.

Azure portal

Per riavviare una macchina virtuale tramite il portale di Azure, seleziona la tua macchina virtuale e quindi Riavvia come nell'esempio seguente:

Screenshot per riavviare una macchina virtuale nel portale di Azure.

Interfaccia della riga di comando di Azure

L'esempio seguente utilizza az vm restart per riavviare la macchina virtuale denominata myVM nel gruppo di risorse denominato myResourceGroup. Usa i tuoi valori come segue:

az vm restart --resource-group myResourceGroup --name myVM

Ridistribuire una VM

È possibile ridistribuire una macchina virtuale in un altro nodo all'interno di Azure, che potrebbe correggere eventuali problemi di rete sottostanti. Per informazioni sulla ridistribuzione di una macchina virtuale, vedere Ridistribuire la macchina virtuale in un nuovo nodo di Azure.

Note

Al termine di questa operazione, i dati temporanei del disco vengono persi e gli indirizzi IP dinamici associati alla macchina virtuale vengono aggiornati.

Azure portal

Per ridistribuire una macchina virtuale usando il portale di Azure, seleziona la tua macchina virtuale e scorri verso il basso fino alla sezione Guida. Seleziona Ridistribuisci come nell'esempio seguente:

Screenshot per ridistribuire una macchina virtuale nel portale di Azure.

Interfaccia della riga di comando di Azure

L'esempio seguente utilizza az vm redeploy per ridistribuire la macchina virtuale denominata myVM nel gruppo di risorse denominato myResourceGroup. Usa i tuoi valori come segue:

az vm redeploy --resource-group myResourceGroup --name myVM

Risorse aggiuntive

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.