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

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.

Nota

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:

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 o le credenziali S S H in 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 ulteriori informazioni, consulta Utilizzo di regole di sicurezza efficaci per la risoluzione dei problemi relativi al flusso del traffico VM.

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

Nota

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

oppure

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

Usare l'interfaccia della riga di comando classica di Azure

Se non lo si è ancora fatto, installare l'interfaccia della riga di comando di Azure e connettersi alla sottoscrizione di Azure. Assicurati di utilizzare la modalità Resource Manager come segue:

azure config mode arm

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

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.

Portale di Azure

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

Interfaccia della riga di comando classica di Azure

Importante

Le macchine virtuali classiche verranno ritirate il 1° settembre 2023

Se si utilizzano risorse IaaS da ASM, completare la migrazione entro il 1° settembre 2023. Ti invitiamo a effettuare il passaggio prima per sfruttare i numerosi miglioramenti delle funzionalità in Azure Resource Manager.

Per ulteriori informazioni, consultare Migrazione delle risorse IaaS in Azure Resource Manager entro il 1° settembre 2023.

L'esempio seguente riavvia la macchina virtuale denominata myVM nel gruppo di risorse denominato myResourceGroup. Usa i tuoi valori come segue:

azure 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.

Nota

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

Portale di Azure

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

Interfaccia della riga di comando classica di Azure

L'esempio seguente ridistribuisce la macchina virtuale denominata myVM nel gruppo di risorse denominato myResourceGroup. Usa i tuoi valori come segue:

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

Macchine virtuali create usando il modello di distribuzione classico

Importante

Le macchine virtuali classiche verranno ritirate il 1° settembre 2023

Se si utilizzano risorse IaaS da ASM, completare la migrazione entro il 1° settembre 2023. Ti invitiamo a effettuare il passaggio prima per sfruttare i numerosi miglioramenti delle funzionalità in Azure Resource Manager.

Per ulteriori informazioni, consultare Migrazione delle risorse IaaS in Azure Resource Manager entro il 1° settembre 2023.

Prova questi passaggi per risolvere gli errori di connessione SSH più comuni per le macchine virtuali create usando il modello di distribuzione classico. Dopo ogni passaggio, prova a riconnetterti alla VM.

  • Reimposta l'accesso remoto dal portale di Azure. Nel Portale di Azure, selezionare la macchina virtuale e poi selezionare Reimposta remoto....

  • Riavviare la macchina virtuale. Nel Portale di Azure, seleziona la tua macchina virtuale e seleziona Riavvia.

  • Ridistribuire la macchina virtuale in un nuovo nodo di Azure. Per informazioni su come ridistribuire una macchina virtuale, vedere Ridistribuire la macchina virtuale in un nuovo nodo di Azure.

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

  • Seguire le istruzioni in Come reimpostare una password o SSH per macchine virtuali basate su Linux per:

    • Reimpostare la password o la chiave SSH.
    • Creare un account utente sudo.
    • Ripristinare la configurazione SSH.
  • Controllare l'integrità delle risorse della VM per eventuali problemi della piattaforma.
    Seleziona la tua VM e scorri verso il basso Impostazioni>Controlla integrità.

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.