Risoluzione dei problemi di connessione SSH a una macchina virtuale Linux di Azure che ha esito negativo, genera errori o è stata rifiutata

Si applica a: ✔️ macchine virtuali Linux

Questo articolo illustra come trovare e correggere i problemi dovuti a errori Secure Shell (SSH), a errori di connessione SSH o al rifiuto della connessione SSH durante il tentativo di connessione a una macchina virtuale Linux. È possibile usare il portale di Azure, l'interfaccia della riga di comando Azure o l'estensione dell'accesso alle VM per Linux per risolvere i problemi di connessione.

Nota

Questo articolo ti è stato utile? L'input è importante per noi. Usare il pulsante Commenti e suggerimenti in questa pagina per segnalare il funzionamento di questo articolo o il modo in cui è possibile migliorarlo.

Passaggi rapidi per la risoluzione dei problemi

Dopo ogni passaggio della procedura di risoluzione dei problemi, tentare la riconnessione alla VM.

  1. Reimpostare la configurazione SSH.
  2. Reimpostare le credenziali per l'utente.
  3. Verificare che le regole del gruppo di sicurezza di rete consentano il traffico SSH e l'assegnazione dei ruoli.
    • Verificare l'esistenza di una regola del gruppo di sicurezza di rete che consenta il traffico SSH (per impostazione predefinita, la porta TCP 22).
    • Non è possibile usare il reindirizzamento o mapping delle porte senza usare Azure Load Balancer.
    • Se si usa Microsoft Entra ID per gestire gli account di accesso SSH, all'utente deve essere assegnato il ruolo Accesso amministratore macchina virtuale o Account di accesso utente macchina virtuale nel gruppo di risorse che contiene la macchina virtuale e le relative risorse associate. In caso contrario, verrà restituito l'errore "Autorizzazione negata (chiave pubblica)". Per altre informazioni, vedere Configurare le assegnazioni di ruolo per la macchina virtuale che usa l'account di accesso di Microsoft Entra.
  4. Controllare l'integrità delle risorse della VM.
    • Assicurarsi che la macchina virtuale venga segnalata come integra.
    • Se la diagnostica di avvio è abilitata, verificare che la macchina virtuale non segnali errori di avvio nei log.
  5. Riavviare la macchina virtuale.
  6. Distribuire di nuovo la macchina virtuale.

Continuare la lettura per la procedura di risoluzione dei problemi e spiegazioni più dettagliate.

Metodi disponibili per risolvere i problemi di connessione SSH

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

  • Portale di Azure: indicato per ripristinare rapidamente la configurazione SSH o la chiave SSH nel caso in cui non siano stati installati gli strumenti di Azure.
  • Console seriale di macchine virtuali di Azure: la console seriale della macchina virtuale funzionerà indipendentemente dalla configurazione SSH e fornirà una console interattiva alla macchina virtuale. In realtà, le situazioni "non possono SSH" sono in particolare ciò che la console seriale è stata progettata per risolvere. Altri dettagli sono disponibili più avanti.
  • Usare Esegui comando tramite portale di Azure: è possibile eseguire comandi di base usando la funzionalità Esegui comando tramite il portale di Azure. L'output verrà restituito al portale.
  • Interfaccia della riga di comando di Azure: se ci si trova già nella riga di comando, reimpostare rapidamente le credenziali o la configurazione SSH.
  • Estensione VMAccessForLinux di Azure: creare e usare di nuovo i file di definizione JSON per reimpostare le credenziali utente o la configurazione di SSH.

Dopo ogni passaggio della procedura di risoluzione dei problemi, ritentare di connettersi alla VM. Se ancora non è possibile connettersi, procedere al passaggio successivo.

Usare il portale di Azure

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

Per iniziare, selezionare la macchina virtuale nel portale di Azure. Scorrere verso il basso fino alla sezione Guida e selezionare Reimposta password come nell'esempio seguente:

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

Reimpostare la configurazione SSH

Per reimpostare la configurazione SSH, selezionare Reset configuration only nella sezione Modalità come illustrato nello screenshot precedente e quindi selezionare Aggiorna. Dopo aver completato questa operazione, provare ad accedere nuovamente alla macchina virtuale.

Reimpostare le credenziali SSH di un utente

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

Da questo menu è possibile anche creare un utente con privilegi sudo nella macchina virtuale. Immettere il nuovo nome utente e la password o la chiave SSH associata e quindi selezionare Aggiorna.

Controllare le regole di sicurezza

Usare la funzionalità Verifica flusso IP per verificare che una regola in un gruppo di sicurezza di rete blocchi il traffico da e verso una macchina virtuale. È anche possibile esaminare le regole del gruppo di sicurezza effettive per verificare che la regola del gruppo di sicurezza di rete che consente il traffico in ingresso sia presente e abbia la priorità per la porta SSH, ovvero la porta 22 predefinita. Per altre informazioni, vedere Uso di regole di sicurezza effettive per risolvere i problemi di flusso del traffico delle macchine virtuali.

Controllare il routing

Usare la funzionalità Hop successivo di Network Watcher per verificare che una route non impedisca il routing del traffico da o verso una macchina virtuale. È anche possibile esaminare le route per determinare tutte quelle valide per un'interfaccia di rete. Per altre informazioni, vedere Uso di route valide per risolvere i problemi relativi al flusso di traffico delle macchine virtuali.

Usare la console seriale di macchine virtuali di Azure

La console seriale di macchine virtuali di Azure consente di accedere a una console basata su testo per le macchine virtuali Linux. È possibile usare la console per risolvere i problemi di connessione SSH in una shell interattiva. Assicurarsi di aver soddisfatto i prerequisiti per l'uso della console seriale e provare i comandi seguenti per risolvere ulteriormente i problemi di connettività SSH.

Verificare che il servizio SSH sia in esecuzione

Per controllare lo stato del servizio, usare il comando seguente, disponibile nella maggior parte delle distribuzioni Linux correnti:

sudo systemctl status sshd.service

Vedere l'esempio di output seguente. Controllare lo stato del Active servizio dalla riga nell'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, usare altri comandi disponibili. È possibile usare il ss comando come radice o tramite il sudo comando per verificare se il servizio SSH è in esecuzione nella macchina virtuale.

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

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

Nota

È consigliabile usare il ss comando perché il netstat comando è deprecato e non sempre disponibile nelle distribuzioni moderne.

Se è presente un output, SSH è operativo. Vedere l'esempio di output seguente:

$ 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 --listen --tcp --process –numeric argomenti. L'output mostra che il processo SSHD 829 è in ascolto su indirizzi IPv4 e IPv6.

Verificare la porta in cui è in esecuzione SSH

L'output del comando precedente mostra che il processo SSHD è in ascolto sulla porta 22. Quando il processo SSHD è configurato per l'esecuzione 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 usando uno dei comandi seguenti:

grep -i port /etc/ssh/sshd_config

or

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 ignorata in modo sicuro. Se non viene restituito alcun valore o le righe sono commenti, viene utilizzata la configurazione predefinita. La configurazione predefinita consiste nell'ascoltare tutti gli indirizzi IP nel sistema sulla porta 22.

Usare esegui comando tramite portale di Azure

Se non è possibile eseguire comandi tramite la console seriale, ad esempio quando vengono usate solo le chiavi SSH per l'autenticazione, è possibile usare la funzionalità Esegui comando per eseguire 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 del portale di Azure. L'output verrà restituito al portale di Azure. Non è necessario usare sudo per eseguire i comandi nel contesto Esegui comando.

Usare l'interfaccia della riga di comando di Azure

Se non è già stato fatto, installare la versione più recente dell'interfaccia della riga di comando di Azure e accedere a un account di Azure tramite il comando az login.

Se è stata creata e caricata un'immagine del disco Linux personalizzata, verificare che sia installato l'agente Linux di Microsoft Azure in versione 2.0.5 o successiva. Per le macchine virtuali create tramite le immagini della raccolta, questa estensione dell'accesso è già installata e configurata automaticamente.

Reimpostare la configurazione SSH

È possibile provare inizialmente a reimpostare la configurazione SSH ai valori predefiniti e riavviare quindi il server SSH nella macchina virtuale. Il nome dell'account utente, la password o le chiavi SSH non verranno modificate. L'esempio seguente usa az vm user reset-ssh per reimpostare la configurazione SSH nella macchina virtuale denominata myVM in myResourceGroup. Usare i valori personalizzati come di seguito:

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

Reimpostare le credenziali SSH di un utente

L'esempio seguente usa il comando az vm user update per reimpostare le credenziali per myUsername sul valore specificato in myPassword, nella macchina virtuale denominata myVM in myResourceGroup. Usare i valori personalizzati come di seguito:

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

Se si usa l'autenticazione con chiave SSH, è possibile reimpostare la chiave SSH per un determinato utente. L'esempio seguente usa il comando az vm access set-linux-user per aggiornare la chiave SSH memorizzata in ~/.ssh/id_rsa.pub per l'utente denominato myUsername, nella VM denominata myVM in myResourceGroup. Usare i valori personalizzati come di seguito:

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

Usare l'estensione VMAccess

L'estensione di accesso alle macchine virtuali per Linux legge in un file JSON che definisce le azioni da eseguire. Queste azioni includono la reimpostazione di SSHD, la reimpostazione di una chiave SSH o l'aggiunta di un utente. È comunque possibile usare l'interfaccia della riga di comando di Azure per chiamare l'estensione VMAccess, ma è possibile anche usare di nuovo i file json tra più macchine virtuali, se desiderato. Questo approccio consente di creare un archivio di file json da chiamare per determinati scenari.

Reimpostare un disco SSHD

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

{
    "reset_ssh":True
}

Tramite l'interfaccia della riga di comando di Azure chiamare l'estensione VMAccessForLinux per reimpostare la connessione SSHD specificando il file json. L'esempio seguente usa az vm extension set per reimpostare SSHD nella macchina virtuale denominata myVM in myResourceGroup. Usare i valori personalizzati come di seguito:

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

Reimpostare le credenziali SSH di un utente

Se il disco SSHD funziona correttamente, è possibile reimpostare le credenziali di un determinato utente. Per reimpostare la password per un utente, creare un file denominato settings.json. L'esempio seguente reimposta le credenziali per myUsername sul valore specificato in myPassword. Immettere le seguenti righe nel file settings.json con valori personalizzati:

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

In alternativa, per reimpostare la chiave SSH per un utente, creare innanzitutto un file denominato settings.json. L'esempio seguente reimposta le credenziali per myUsername sul valore specificato in myPassword nella macchina virtuale denominata myVM in myResourceGroup. Immettere le seguenti righe nel file settings.json con valori personalizzati:

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

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

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

Reimpostare la configurazione SSH

La configurazione del disco SSHD in sé può essere errata oppure il servizio ha rilevato un errore. È possibile reimpostare il disco SSHD per controllare la validità della configurazione SSH. La reimpostazione SSHD deve essere il primo passaggio da eseguire per la risoluzione dei problemi.

L'esempio seguente reimposta SSHD su una macchina virtuale denominata myVM nel gruppo di risorse myResourceGroup. Usare i nomi della macchina virtuale e del gruppo di risorse personalizzati come segue:

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

Reimpostare le credenziali SSH di un utente

Se il disco SSHD funziona correttamente, è possibile reimpostare la password di un determinato utente. L'esempio seguente reimposta le credenziali per myUsername sul valore specificato in myPassword nella macchina virtuale denominata myVM in myResourceGroup. Usare i valori personalizzati come di seguito:

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

Se si usa l'autenticazione con chiave SSH, è possibile reimpostare la chiave SSH per un determinato utente. L'esempio seguente aggiorna la chiave SSH archiviata in ~/.ssh/id_rsa.pub per l'utente denominato myUsername nella macchina virtuale denominata myVM in myResourceGroup. Usare i valori personalizzati come di seguito:

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

Riavviare una macchina virtuale

Se sono state reimpostate la configurazione SSH e le credenziali utente o si è verificato un errore durante queste operazioni, è possibile provare a riavviare la macchina virtuale per risolvere i problemi di calcolo alla base.

Azure portal

Per riavviare una macchina virtuale dal portale di Azure, selezionare la macchina virtuale e quindi selezionare 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 usa il comando az vm restart per riavviare la macchina virtuale denominata myVM nel gruppo di risorse denominato myResourceGroup. Usare i valori personalizzati come di seguito:

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

Ridistribuire una macchina virtuale

È possibile ridistribuire una VM in un altro nodo all'interno di Azure, correggendo eventuali problemi di rete sottostanti. Per informazioni su come eseguire questa operazione, vedere Ridistribuzione della macchina virtuale su un nuovo nodo di Azure.

Nota

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

Azure portal

Per ridistribuire una macchina virtuale usando il portale di Azure, selezionare la macchina virtuale e scorrere verso il basso fino alla sezione ? Fare clic su Ridistribuisci, come nell'esempio seguente:

Screenshot per ridistribuire una macchina virtuale nella portale di Azure.

Interfaccia della riga di comando di Azure

L'esempio seguente usa il comando az vm redeploy per ridistribuire la macchina virtuale denominata myVM nel gruppo di risorse denominato myResourceGroup. Usare i valori personalizzati come di seguito:

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.