Risolvere gli errori SSH


Questo documento descrive gli errori comuni che potresti riscontrare durante la connessione alle istanze di macchine virtuali (VM) utilizzando SSH, i modi per risolvere gli errori e i metodi per diagnosticare le connessioni SSH non riuscite.

Strumento di risoluzione dei problemi relativi a SSH

Utilizza lo strumento per la risoluzione dei problemi SSH per determinare il motivo per cui la connessione SSH non è riuscita. Lo strumento di risoluzione dei problemi esegue i seguenti test per verificare la causa delle connessioni SSH non riuscite:

  • Test delle autorizzazioni dell'utente:verifica se hai le autorizzazioni IAM necessarie per connetterti alla VM tramite SSH.
  • Test di connettività di rete:controlla se la VM è connessa alla rete.
  • Test dello stato dell'istanza VM:controlla lo stato della CPU della VM per vedere se la VM è in esecuzione.
  • Test delle impostazioni VPC:controlla la porta SSH predefinita.

Eseguire lo strumento di risoluzione dei problemi

Puoi utilizzare la Google Cloud console o Google Cloud CLI per verificare la presenza di problemi di rete ed errori di autorizzazione utente che potrebbero causare errori di connessione SSH.

Console

Se una connessione SSH non riesce, puoi Riprovare la connessione o Risolvere i problemi della connessione utilizzando lo strumento di risoluzione dei problemi SSH nel browser.

Per eseguire lo strumento di risoluzione dei problemi, fai clic su Risolvi i problemi.

Avvia lo strumento di risoluzione dei problemi relativi a SSH.

gcloud

Esegui lo strumento di risoluzione dei problemi utilizzando il comando gcloud compute ssh:

gcloud compute ssh VM_NAME \
    --troubleshoot

Sostituisci VM_NAME con il nome della VM a cui non riesci a connetterti.

Lo strumento ti chiede di fornire l'autorizzazione per eseguire i test di risoluzione dei problemi.

Esaminare i risultati

Dopo aver eseguito lo strumento di risoluzione dei problemi, procedi nel seguente modo:

  1. Esamina i risultati del test per capire perché la connessione SSH della VM non funziona.
  2. Risolvi le connessioni SSH eseguendo la procedura di correzione fornita dallo strumento.
  3. Prova a riconnetterti alla VM.

    Se la connessione non va a buon fine, prova a risolvere manualmente il problema nel seguente modo:

Errori SSH comuni

Di seguito sono riportati alcuni esempi di errori comuni che potresti riscontrare quando utilizzi SSH per connetterti alle VM di Compute Engine.

Errori di SSH nel browser

Errore di mancata autorizzazione 401

Quando ti connetti alla VM utilizzando SSH nel browser dalla console Google Cloud , potrebbe verificarsi il seguente errore:

Unauthorized
Error 401

Questo errore si verifica se il tuo utente fa parte di un'organizzazione gestita da Google Workspace e se è presente una limitazione attiva nelle norme di Workspace che impedisce agli utenti di accedere a SSH nel browser e alla console seriale in Google Cloud.

Per risolvere il problema, chiedi a un amministratore di Google Workspace di procedere nel seguente modo:

  1. Verifica che Google Cloud sia attivato per l'organizzazione.

    Se Google Cloud è disattivato, attivalo e riprova a connetterti.

  2. Verifica che i servizi non controllabili individualmente siano attivi.

    Se questi servizi sono disattivati, attivali e riprova a connetterti.

Se il problema persiste dopo aver attivato le impostazioni Google Cloud in Google Workspace, procedi nel seguente modo:

  1. Acquisisci il traffico di rete in un file HAR (HTTP Archive Format) a partire dall'inizio della connessione SSH in SSH nel browser.

  2. Crea una richiesta di assistenza clienti Google Cloud e allega il file HAR.

Impossibile connettersi, nuovo tentativo in corso…

Quando avvii una sessione SSH, potrebbe verificarsi il seguente errore:

Could not connect, retrying ...

Impossibile connettersi, nuovo tentativo in corso

Per risolvere il problema:

  1. Dopo l'avvio della VM, riprova a connetterti. Se la connessione non va a buon fine, verifica che la VM non sia stata avviata in modalità di emergenza eseguendo questo comando:

    gcloud compute instances get-serial-port-output VM_NAME \
    | grep "emergency mode"
    

    Se la VM viene avviata in modalità di emergenza, risolvi i problemi relativi al processo di avvio della VM per identificare il punto in cui il processo di avvio non riesce.

  2. Verifica che il serviziogoogle-guest-agent.service sia in esecuzione eseguendo questo comando nella console seriale.

    systemctl status google-guest-agent.service
    

    Se il servizio è disattivato, attivalo e avvialo eseguendo questi comandi:

    systemctl enable google-guest-agent.service
    systemctl start google-guest-agent.service
    
  3. Verifica che gli script dell'agente Google per Linux siano installati e in esecuzione. Per ulteriori informazioni, vedi Determinare lo stato dell'agente Google. Se l'agente Google per Linux non è installato, reinstallalo.

  4. Verifica di disporre dei ruoli necessari per connetterti alla VM. Se la tua VM utilizza OS Login, consulta Assegnare il ruolo IAM OS Login. Se la VM non utilizza OS Login, devi disporre del ruolo Amministratore istanza Compute o del ruolo Utente service account (se la VM è configurata per essere eseguita come account di servizio). I ruoli sono necessari per aggiornare i metadati delle chiavi SSH dell'istanza o del progetto.

  5. Verifica che esista una regola firewall che consenta l'accesso SSH eseguendo questo comando:

    gcloud compute firewall-rules list | grep "tcp:22"
    
  6. Verifica che esista una route predefinita a internet (o all'host bastion). Per saperne di più, consulta la sezione Controllare i percorsi.

  7. Assicurati che il volume principale non abbia esaurito lo spazio su disco. Per saperne di più, consulta la sezione Risolvi i problemi relativi ai dischi con spazio esaurito e al ridimensionamento dei dischi.

  8. Assicurati che la VM non abbia esaurito la memoria eseguendo questo comando:

    gcloud compute instances get-serial-port-output instance-name \
    | grep "Out of memory: Kill process" - e "Kill process" -e "Memory cgroup out of memory" -e "oom"
    

    Se la VM non ha più memoria, connettiti alla console seriale per risolvere il problema.

Errori di Linux

Autorizzazione negata (publickey)

Quando ti connetti alla tua VM, potrebbe verificarsi il seguente errore:

USERNAME@VM_EXTERNAL_IP: Permission denied (publickey).

Questo errore può verificarsi per diversi motivi. Di seguito sono riportate alcune delle cause più comuni di questo errore:

  • Hai utilizzato una chiave SSH archiviata nei metadati per connetterti a una VM con OS Login abilitato. Se OS Login è abilitato nel progetto, la VM non accetta le chiavi SSH archiviate nei metadati. Se non sai se OS Login è attivato, consulta Verificare se OS Login è configurato.

    Per risolvere il problema, prova una delle seguenti soluzioni:

  • Hai utilizzato una chiave SSH archiviata in un profilo OS Login per connetterti a una VM per cui OS Login non è abilitato. Se disattivi OS Login, la VM non accetta le chiavi SSH memorizzate nel tuo profilo OS Login. Se non sai se OS Login è abilitato, consulta Verifica se OS Login è configurato.

    Per risolvere il problema, prova una delle seguenti soluzioni:

  • La VM ha OS Login abilitato, ma non disponi di autorizzazioni IAM sufficienti per utilizzare OS Login. Per connetterti a una VM su cui è abilitato OS Login, devi disporre delle autorizzazioni richieste per OS Login. Se non sai se OS Login è attivato, consulta Verificare se OS Login è configurato.

    Per risolvere il problema, concedi i ruoli IAM OS Login richiesti.

  • La chiave è scaduta e Compute Engine ha eliminato il file ~/.ssh/authorized_keys. Se hai aggiunto manualmente chiavi SSH alla tua VM e poi ti sei connesso alla VM utilizzando la console Google Cloud , Compute Engine ha creato una nuova coppia di chiavi per la tua connessione. Dopo la scadenza della nuova coppia di chiavi, Compute Engine ha eliminato il file ~/.ssh/authorized_keys nella VM, che includeva la chiave SSH aggiunta manualmente.

    Per risolvere il problema, prova una delle seguenti soluzioni:

  • Ti sei connesso utilizzando uno strumento di terze parti e il comando SSH è configurato in modo errato. Se ti connetti utilizzando il comando ssh, ma non specifichi un percorso per la chiave privata o specifichi un percorso errato per la chiave privata, la VM rifiuta la connessione.

    Per risolvere il problema, prova una delle seguenti soluzioni:

    • Esegui questo comando:
      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Sostituisci quanto segue:
      • PATH_TO_PRIVATE_KEY: il percorso del file della chiave privata SSH.
      • USERNAME: il nome utente dell'utente che si connette all'istanza. Se gestisci le chiavi SSH nei metadati, il nome utente è quello che hai specificato quando hai creato la chiave SSH. Per gli account OS Login, il nome utente è definito nel tuo profilo Google.
      • EXTERNAL_IP: L'indirizzo IP esterno della tua VM.
    • Connettiti alla VM utilizzando la console Google Cloud o Google Cloud CLI. Quando utilizzi questi strumenti per connetterti, Compute Engine gestisce la creazione delle chiavi per te. Per saperne di più, consulta Connessione alle VM.
  • L'ambiente guest della VM non è in esecuzione. Se è la prima volta che ti connetti alla VM e l'ambiente guest non è in esecuzione, la VM potrebbe rifiutare la tua richiesta di connessione SSH.

    Per risolvere il problema:

    1. Riavvia la VM.
    2. Nella console Google Cloud , esamina i log di avvio del sistema nell'output della porta seriale per determinare se l'ambiente guest è in esecuzione. Per ulteriori informazioni, vedi Convalida dell'ambiente ospite.
    3. Se l'ambiente guest non è in esecuzione, installalo manualmente clonando il disco di avvio della VM e utilizzando uno script di avvio.
  • Il daemon OpenSSH (sshd) non è in esecuzione o non è configurato correttamente. sshd fornisce accesso remoto sicuro al sistema tramite il protocollo SSH. Se è configurato in modo errato o non è in esecuzione, non puoi connetterti alla tua VM tramite SSH.

    Per risolvere il problema, prova una o più delle seguenti soluzioni:

    • Consulta la guida utente del tuo sistema operativo per assicurarti che sshd_config sia configurato correttamente.

    • Assicurati di disporre delle impostazioni di proprietà e autorizzazione richieste per quanto segue:

      • Directory $HOME e $HOME/.ssh
      • File $HOME/.ssh/authorized_keys

      Proprietà

      L'ambiente guest memorizza le chiavi pubbliche SSH autorizzate nel file $HOME/.ssh/authorized_keys. Il proprietario delle directory $HOME e $HOME/.ssh e del file $HOME/.ssh/authorized_keys deve essere lo stesso dell'utente che si connette alla VM.

      Autorizzazioni

      L'ambiente guest richiede le seguenti autorizzazioni Linux:

      Percorso Autorizzazioni
      /home 0755
      $HOME 0700 o 0750 o 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Per scoprire quale delle opzioni è l'autorizzazione predefinita corretta per la tua directory $HOME, consulta la documentazione ufficiale della tua distribuzione Linux specifica.


      In alternativa, puoi creare una nuova VM basata sulla stessa immagine e controllare le relative autorizzazioni predefinite per $HOME.

      Per scoprire come modificare le autorizzazioni e la proprietà, leggi informazioni su chmod e chown.

    • Riavvia sshd eseguendo questo comando:

      systemctl restart sshd.service

      Controlla se sono presenti errori nello stato eseguendo il seguente comando:

      systemctl status sshd.service

      L'output dello stato può contenere informazioni come il codice di uscita, il motivo dell'errore e così via. Puoi utilizzare questi dettagli per ulteriori risoluzioni dei problemi.

  • Il disco di avvio della VM è pieno. Quando viene stabilita una connessione SSH, l'ambiente guest aggiunge la chiave SSH pubblica della sessione al file ~/.ssh/authorized_keys. Se il disco è pieno, la connessione non riesce.

    Per risolvere il problema, esegui una o più delle seguenti operazioni:

  • Le autorizzazioni o la proprietà di $HOME, $HOME/.ssh o $HOME/.ssh/authorized_keys non sono corrette.

    Proprietà

    L'ambiente guest memorizza le chiavi pubbliche SSH autorizzate nel file $HOME/.ssh/authorized_keys. Il proprietario delle directory $HOME e $HOME/.ssh e del file $HOME/.ssh/authorized_keys deve essere lo stesso dell'utente che si connette alla VM.

    Autorizzazioni

    L'ambiente guest richiede le seguenti autorizzazioni Linux:

    Percorso Autorizzazioni
    /home 0755
    $HOME 0700 o 0750 o 0755 *
    $HOME/.ssh 0700
    $HOME/.ssh/authorized_keys 0600

    * Per scoprire quale delle opzioni è l'autorizzazione predefinita corretta per la tua directory $HOME, consulta la documentazione ufficiale della tua distribuzione Linux specifica.


    In alternativa, puoi creare una nuova VM basata sulla stessa immagine e controllare le relative autorizzazioni predefinite per $HOME.

    Per scoprire come modificare le autorizzazioni e la proprietà, leggi informazioni su chmod e chown.

Connessione non riuscita

Quando ti connetti alla tua VM dalla consoleGoogle Cloud , da gcloud CLI, da un bastion host o da un client locale, potrebbero verificarsi i seguenti errori:

  • La console Google Cloud :

    Connection Failed
    
    We are unable to connect to the VM on port 22.
    
  • Gcloud CLI:

    ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
    
  • Un bastion host o un client locale:

    port 22: Connection timed out.
    
    port 22: Connection refused
    

Questi errori possono verificarsi per diversi motivi. Di seguito sono riportate alcune delle cause più comuni degli errori:

  • La VM è in fase di avvio e sshd non è ancora in esecuzione. Non puoi connetterti a una VM prima che sia in esecuzione.

    Per risolvere il problema, attendi il termine dell'avvio della VM e riprova a connetterti.

  • sshd è in esecuzione su una porta personalizzata. Se hai configurato sshd per l'esecuzione su una porta diversa dalla porta 22, non potrai connetterti alla VM.

    Per risolvere il problema, crea una regola firewall personalizzata che consenta il traffico tcp sulla porta su cui è in esecuzione sshd utilizzando il seguente comando:

    gcloud compute firewall-rules create FIREWALL_NAME \
      --allow tcp:PORT_NUMBER
    

    Per saperne di più sulla creazione di regole firewall personalizzate, consulta Creare regole firewall.

  • La regola firewall SSH non è presente o non consente il traffico da IAP o dalla rete internet pubblica. Le connessioni SSH vengono rifiutate se le regole firewall non consentono connessioni da IAP o dal traffico in entrata TCP per l'intervallo IP 0.0.0.0/0.

    Per risolvere il problema, esegui una delle seguenti operazioni:

    • Se utilizzi Identity-Aware Proxy (IAP) per l'inoltro TCP, aggiorna la regola firewall personalizzata per accettare il traffico da IAP, quindi controlla le autorizzazioni IAM.

      1. Aggiorna la regola firewall personalizzata per consentire il traffico da 35.235.240.0/20, l'intervallo di indirizzi IP utilizzato da IAP per l'inoltro TCP. Per maggiori informazioni, vedi Creare una regola firewall.
      2. Concedi le autorizzazioni per utilizzare l'inoltro TCP di IAP, se non l'hai già fatto.
    • Se non utilizzi IAP, aggiorna la regola firewall personalizzata per consentire il traffico SSH in entrata.

      1. Aggiorna la regola firewall personalizzata per consentire le connessioni SSH in entrata alle VM.
  • La connessione SSH non è riuscita dopo l'upgrade del kernel della VM. Una VM potrebbe riscontrare un kernel panic dopo un aggiornamento del kernel, causando l'inaccessibilità della VM.

    Per risolvere il problema:

    1. Monta il disco su un'altra VM.
    2. Aggiorna il file grub.cfg per utilizzare la versione precedente del kernel.
    3. Collega il disco alla VM che non risponde.
    4. Verifica che lo stato della VM sia RUNNING utilizzando il comando gcloud compute instances describe.
    5. Reinstalla il kernel.
    6. Riavvia la VM.

    In alternativa, se hai creato uno snapshot del disco di avvio prima di eseguire l'upgrade della VM, utilizza lo snapshot per creare una VM.

  • Il daemon OpenSSH (sshd) non è in esecuzione o non è configurato correttamente. sshd fornisce accesso remoto sicuro al sistema tramite il protocollo SSH. Se è configurato in modo errato o non è in esecuzione, non puoi connetterti alla tua VM tramite SSH.

    Per risolvere il problema, prova una o più delle seguenti soluzioni:

    • Consulta la guida utente del tuo sistema operativo per assicurarti che sshd_config sia configurato correttamente.

    • Assicurati di disporre delle impostazioni di proprietà e autorizzazione richieste per quanto segue:

      • Directory $HOME e $HOME/.ssh
      • File $HOME/.ssh/authorized_keys

      Proprietà

      L'ambiente guest memorizza le chiavi pubbliche SSH autorizzate nel file $HOME/.ssh/authorized_keys. Il proprietario delle directory $HOME e $HOME/.ssh e del file $HOME/.ssh/authorized_keys deve essere lo stesso dell'utente che si connette alla VM.

      Autorizzazioni

      L'ambiente guest richiede le seguenti autorizzazioni Linux:

      Percorso Autorizzazioni
      /home 0755
      $HOME 0700 o 0750 o 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Per scoprire quale delle opzioni è l'autorizzazione predefinita corretta per la tua directory $HOME, consulta la documentazione ufficiale della tua distribuzione Linux specifica.


      In alternativa, puoi creare una nuova VM basata sulla stessa immagine e controllare le relative autorizzazioni predefinite per $HOME.

      Per scoprire come modificare le autorizzazioni e la proprietà, leggi informazioni su chmod e chown.

    • Riavvia sshd eseguendo questo comando:

      systemctl restart sshd.service

      Controlla se sono presenti errori nello stato eseguendo il seguente comando:

      systemctl status sshd.service

      L'output dello stato può contenere informazioni come il codice di uscita, il motivo dell'errore e così via. Puoi utilizzare questi dettagli per ulteriori risoluzioni dei problemi.

  • La VM non si avvia e non riesci a connetterti tramite SSH o la console seriale. Se la VM non è accessibile, il sistema operativo potrebbe essere danneggiato. Se il disco di avvio non si avvia, puoi diagnosticare il problema. Se vuoi recuperare la VM danneggiata e recuperare i dati, vedi Recuperare una VM danneggiata o un disco di avvio pieno.

  • La VM si sta avviando in modalità di manutenzione. Durante l'avvio in modalità di manutenzione, la VM non accetta connessioni SSH, ma puoi connetterti alla console seriale della VM e accedere come utente root.

    Per risolvere il problema:

    1. Se non hai impostato una password di root per la VM, utilizza uno script di avvio dei metadati per eseguire il seguente comando durante l'avvio:

      echo 'root:NEW_PASSWORD' | chpasswd

      Sostituisci NEW_PASSWORD con una password a tua scelta.

    2. Riavvia la VM.

    3. Connettiti alla console seriale della VM e accedi come utente root.

Errore imprevisto

Quando provi a connetterti a una VM Linux, potrebbe verificarsi il seguente errore:

Connection Failed
You cannot connect to the VM instance because of an unexpected error. Wait a few moments and then try again.

Questo problema può verificarsi per diversi motivi. Di seguito sono riportate alcune cause comuni dell'errore:

  • Il daemon OpenSSH (sshd) non è in esecuzione o non è configurato correttamente. sshd fornisce accesso remoto sicuro al sistema tramite il protocollo SSH. Se è configurato in modo errato o non è in esecuzione, non puoi connetterti alla tua VM tramite SSH.

    Per risolvere il problema, prova una o più delle seguenti soluzioni:

    • Consulta la guida utente del tuo sistema operativo per assicurarti che sshd_config sia configurato correttamente.

    • Assicurati di disporre delle impostazioni di proprietà e autorizzazione richieste per quanto segue:

      • Directory $HOME e $HOME/.ssh
      • File $HOME/.ssh/authorized_keys

      Proprietà

      L'ambiente guest memorizza le chiavi pubbliche SSH autorizzate nel file $HOME/.ssh/authorized_keys. Il proprietario delle directory $HOME e $HOME/.ssh e del file $HOME/.ssh/authorized_keys deve essere lo stesso dell'utente che si connette alla VM.

      Autorizzazioni

      L'ambiente guest richiede le seguenti autorizzazioni Linux:

      Percorso Autorizzazioni
      /home 0755
      $HOME 0700 o 0750 o 0755 *
      $HOME/.ssh 0700
      $HOME/.ssh/authorized_keys 0600

      * Per scoprire quale delle opzioni è l'autorizzazione predefinita corretta per la tua directory $HOME, consulta la documentazione ufficiale della tua distribuzione Linux specifica.


      In alternativa, puoi creare una nuova VM basata sulla stessa immagine e controllare le relative autorizzazioni predefinite per $HOME.

      Per scoprire come modificare le autorizzazioni e la proprietà, leggi informazioni su chmod e chown.

    • Riavvia sshd eseguendo questo comando:

      systemctl restart sshd.service

      Controlla se sono presenti errori nello stato eseguendo il seguente comando:

      systemctl status sshd.service

      L'output dello stato può contenere informazioni come il codice di uscita, il motivo dell'errore e così via. Puoi utilizzare questi dettagli per ulteriori risoluzioni dei problemi.

  • Problema sconosciuto del daemon SSH. Per diagnosticare un problema sconosciuto del daemon SSH, controlla i log della console seriale per individuare eventuali errori.

    A seconda dell'output dei log della console seriale, prova a recuperare la VM e a risolvere i problemi relativi al daemon SSH procedendo nel seguente modo:

    1. Collega il disco a un'altra VM Linux.
    2. Connettiti alla VM con il disco montato.
    3. Monta il disco all'interno del sistema operativo in una directory MOUNT_DIR all'interno della VM.
    4. Visualizza i log relativi a SSH, /var/log/secure o /var/log/auth.log per eventuali problemi/errori. Se riscontri problemi che puoi risolvere, prova a risolverli. In caso contrario, crea una richiesta di assistenza e allega i log.
    5. Smonta il disco dal sistema operativo utilizzando il comando umount:

      cd ~/
      umount /mnt
      
    6. Scollega il disco dalla VM.

    7. Collega il disco alla VM originale.

    8. Avvia la VM.

Impossibile connettersi al backend

Quando ti connetti alla VM dalla consoleGoogle Cloud o da gcloud CLI, potrebbero verificarsi i seguenti errori:

  • La console Google Cloud :

    -- Connection via Cloud Identity-Aware Proxy Failed
    
    -- Code: 4003
    
    -- Reason: failed to connect to backend
    
  • Gcloud CLI:

    ERROR: (gcloud.compute.start-iap-tunnel) Error while connecting [4003: 'failed to connect to backend'].
    

Questi errori si verificano quando tenti di utilizzare SSH per connetterti a una VM che non ha un indirizzo IP pubblico e per la quale non hai configurato Identity-Aware Proxy sulla porta 22.

Per risolvere il problema, crea una regola firewall sulla porta 22 che consenta il traffico in entrata da Identity-Aware Proxy.

La chiave host non corrisponde

Quando ti connetti alla tua VM, potrebbe verificarsi il seguente errore:

Host key for server IP_ADDRESS does not match

Questo errore si verifica quando la chiave host nel file ~/.ssh/known_hosts non corrisponde alla chiave host della VM.

Per risolvere il problema, elimina la chiave host dal file ~/.ssh/known_hosts, poi riprova a connetterti.

Il valore dei metadati è troppo grande

Quando provi ad aggiungere una nuova chiave SSH ai metadati, potrebbe verificarsi il seguente errore:

ERROR:"Value for field 'metadata.items[X].value' is too large: maximum size 262144 character(s); actual size NUMBER_OF_CHARACTERS."

I valori dei metadati hanno un limite massimo di 256 KB. Per ovviare a questa limitazione, esegui una delle seguenti operazioni:

Nessun metodo di autenticazione supportato disponibile

Quando ti connetti a una VM, potrebbe verificarsi il seguente errore:

No supported authentication methods available (server sent: publickey,gssapi-keyex,gssapi-with-mic)

Questo errore si verifica più comunemente a causa di un client SSH obsoleto. I client SSH meno recenti potrebbero non supportare i tipi di chiavi ECDSA e gli algoritmi di hashing SHA-2 richiesti dalle VM più recenti.

Ad esempio, questo errore si verifica se provi a connetterti a una VM Red Hat Enterprise Linux (RHEL) utilizzando una versione di PuTTY precedente alla 0.75.

Per risolvere questo errore, aggiorna il client SSH alla versione stabile più recente. Dopo aver aggiornato il client SSH, riprova a stabilire la connessione SSH.

Errori di Windows

Autorizzazione negata. Riprova.

Quando ti connetti alla tua VM, potrebbe verificarsi il seguente errore:

USERNAME@compute.INSTANCE_ID's password:
Permission denied, please try again.

Questo errore indica che l'utente che tenta di connettersi alla VM non esiste sulla VM. Di seguito sono riportate alcune delle cause più comuni di questo errore:

  • La tua versione di gcloud CLI è obsoleta

    Se gcloud CLI non è aggiornata, potresti tentare di connetterti utilizzando un nome utente non configurato. Per risolvere il problema, aggiorna gcloud CLI.

  • Hai provato a connetterti a una VM Windows su cui SSH non è attivo.

    Per risolvere questo errore, imposta la chiave enable-windows-ssh su TRUE nei metadati del progetto o dell'istanza. Per ulteriori informazioni sull'impostazione dei metadati, vedi Impostare metadati personalizzati.

Autorizzazione negata (publickey,keyboard-interactive)

Il seguente errore potrebbe verificarsi quando ti connetti a una VM su cui SSH non è abilitato:

Permission denied (publickey,keyboard-interactive).

Per risolvere questo errore, imposta la chiave enable-windows-ssh su TRUE nei metadati del progetto o dell'istanza. Per ulteriori informazioni sull'impostazione dei metadati, vedi Impostare metadati personalizzati.

Impossibile accedere all'istanza tramite SSH

Quando ti connetti alla VM da gcloud CLI, potrebbe verificarsi il seguente errore:

ERROR: (gcloud.compute.ssh) Could not SSH into the instance.
It is possible that your SSH key has not propagated to the instance yet.
Try running this command again.  If you still cannot connect, verify that the firewall and instance are set to accept ssh traffic.

Questo errore può verificarsi per diversi motivi. Di seguito sono riportate alcune delle cause più comuni degli errori:

  • Hai provato a connetterti a una VM Windows su cui non è installato SSH.

    Per risolvere il problema, segui le istruzioni per attivare SSH per Windows su una VM in esecuzione.

  • Il server OpenSSH (sshd) non è in esecuzione o non è configurato correttamente. sshd fornisce accesso remoto sicuro al sistema tramite il protocollo SSH. Se è configurato in modo errato o non è in esecuzione, non puoi connetterti alla tua VM tramite SSH.

    Per risolvere il problema, consulta la configurazione del server OpenSSH per Windows Server e Windows per assicurarti che sshd sia configurato correttamente.

Timeout della connessione

I timeout delle connessioni SSH potrebbero essere causati da uno dei seguenti motivi:

  • L'avvio della VM non è stato completato. Attendi un po' di tempo per l'avvio della VM.

    Per risolvere il problema, attendi il termine dell'avvio della VM e riprova a connetterti.

  • Il pacchetto SSH non è installato. Le VM Windows richiedono l'installazione del pacchetto google-compute-engine-ssh prima di poterti connettere tramite SSH.

    Per risolvere il problema, installa il pacchetto SSH.

Diagnosticare le connessioni SSH non riuscite

Le sezioni seguenti descrivono i passaggi che puoi eseguire per diagnosticare la causa delle connessioni SSH non riuscite e i passaggi che puoi eseguire per risolvere i problemi di connessione.

Prima di diagnosticare le connessioni SSH non riuscite, completa i seguenti passaggi:

Metodi di diagnostica per VM Linux e Windows

Testa la connettività

Potresti non riuscire a connetterti a un'istanza VM tramite SSH a causa di problemi di connettività correlati a firewall, connessione di rete o account utente. Segui i passaggi in questa sezione per identificare eventuali problemi di connettività.

Controlla le regole firewall

Compute Engine esegue il provisioning di ogni progetto con un insieme predefinito di regole firewall che consentono il traffico SSH. Se non riesci ad accedere alla tua istanza, utilizza lo strumento a riga di comando gcloud compute per controllare l'elenco dei firewall e assicurati che la regola default-allow-ssh sia presente.

Sulla workstation locale, esegui questo comando:

gcloud compute firewall-rules list

Se la regola firewall non è presente, aggiungila di nuovo:

gcloud compute firewall-rules create default-allow-ssh \
    --allow tcp:22

Per visualizzare tutti i dati associati alla regola firewall default-allow-ssh nel tuo progetto, utilizza il comando gcloud compute firewall-rules describe:

gcloud compute firewall-rules describe default-allow-ssh \
    --project=project-id

Per ulteriori informazioni sulle regole firewall, vedi Regole firewall in Google Cloud.

Testare la connessione di rete

Per determinare se la connessione di rete funziona, testa l'handshake TCP:

  1. Ottieni l'natIP esterno per la tua VM:

    gcloud compute instances describe VM_NAME \
        --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
    

    Sostituisci VM_NAME con il nome della VM a cui non riesci a connetterti.

  2. Verifica la connessione di rete alla VM dalla workstation:

    Linux, Windows 2019/2022 e macOS

    curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:PORT_NUMBER
    

    Sostituisci quanto segue:

    • EXTERNAL_IP: l'indirizzo IP esterno che hai ottenuto nel passaggio precedente
    • PORT_NUMBER: il numero di porta

    Se l'handshake TCP ha esito positivo, l'output è simile al seguente:

    Expire in 0 ms for 6 (transfer 0x558b3289ffb0)
    Expire in 5000 ms for 2 (transfer 0x558b3289ffb0)
    Trying 192.168.0.4...
    TCP_NODELAY set
    Expire in 200 ms for 4 (transfer 0x558b3289ffb0)
    Connected to 192.168.0.4 (192.168.0.4) port 443 (#0)
    > GET / HTTP/1.1
    > Host: 192.168.0.4:443
    > User-Agent: curl/7.64.0
    > Accept: */*
    >
    Empty reply from server
    Connection #0 to host 192.168.0.4 left intact
    

    La riga Connected to indica un handshake TCP riuscito.

    Windows 2012 e 2016

    PS C:> New-Object System.Net.Sockets.TcpClient('EXTERNAL_IP',PORT_NUMBER)
    

    Sostituisci quanto segue:

    • EXTERNAL_IP: l'IP esterno ottenuto nel passaggio precedente
    • PORT_NUMBER: il numero di porta

    Se l'handshake TCP ha esito positivo, l'output è simile al seguente:

    Available           : 0
    Client              : System.Net.Sockets.Socket
    Connected           : True
    ExclusiveAddressUse : False
    ReceiveBufferSize   : 131072
    SendBufferSize      : 131072
    ReceiveTimeout      : 0
    SendTimeout         : 0
    LingerState         : System.Net.Sockets.LingerOption
    NoDelay             : False
    

    La riga Connected: True indica un handshake TCP riuscito.

Se l'handshake TCP viene completato correttamente, una regola firewall software non blocca la connessione, il sistema operativo inoltra correttamente i pacchetti e un server è in ascolto sulla porta di destinazione. Se l'handshake TCP viene completato correttamente, ma la VM non accetta connessioni SSH, il problema potrebbe riguardare il daemon sshd, che è configurato in modo errato o non è in esecuzione correttamente. Consulta la guida utente del tuo sistema operativo per assicurarti che sshd_config sia configurato correttamente.

Per eseguire test di connettività per analizzare la configurazione del percorso di rete VPC tra due VM e verificare se la configurazione programmata deve consentire il traffico, consulta Verificare la presenza di regole firewall configurate in modo errato in Google Cloud.

Connettiti come un altro utente

Il problema che ti impedisce di accedere potrebbe essere limitato al tuo account utente. Ad esempio, le autorizzazioni per il file ~/.ssh/authorized_keys nell'istanza potrebbero non essere impostate correttamente per l'utente.

Prova ad accedere come utente diverso con gcloud CLI specificando ANOTHER_USERNAME con la richiesta SSH. gcloud CLI aggiorna i metadati del progetto per aggiungere il nuovo utente e consentire l'accesso SSH.

gcloud compute ssh ANOTHER_USERNAME@VM_NAME

Sostituisci quanto segue:

  • ANOTHER_USERNAME è un nome utente diverso dal tuo
  • VM_NAME è il nome della VM a cui vuoi connetterti

Eseguire il debug dei problemi utilizzando la console seriale

Ti consigliamo di esaminare i log della console seriale per individuare errori di connessione. Puoi accedere alla console seriale come utente root dalla tua workstation locale utilizzando un browser. Questo approccio è utile quando non puoi accedere con SSH o se l'istanza non ha connessione alla rete. La console seriale rimane accessibile in entrambe le situazioni.

Per accedere alla console seriale della VM e risolvere i problemi relativi alla VM, segui questi passaggi:

  1. Abilita l'accesso interattivo alla console seriale della VM.

  2. Per le VM Linux, modifica la password di root e aggiungi il seguente script di avvio alla VM:

    echo root:PASSWORD | chpasswd

    Sostituisci PASSWORD con una password a tua scelta.

  3. Utilizza la console seriale per connetterti alla VM.

  4. Per le VM Linux, dopo aver eseguito il debug di tutti gli errori, disattiva l'accesso all'account root:

    sudo passwd -l root

Metodi di diagnostica per le VM Linux

Ispezionare l'istanza VM senza arrestarla

Potresti avere un'istanza a cui non riesci a connetterti che continua a gestire correttamente il traffico di produzione. In questo caso, potresti voler ispezionare il disco senza interrompere l'istanza.

Per esaminare e risolvere i problemi relativi al disco:

  1. Esegui il backup del disco di avvio creando uno snapshot del disco.
  2. Crea un disco permanente standard da questo snapshot.
  3. Crea un'istanza temporanea.
  4. Collega e monta il disco permanente normale alla nuova istanza temporanea.

Questa procedura crea una rete isolata che consente solo connessioni SSH. Questa configurazione impedisce qualsiasi conseguenza indesiderata dell'istanza clonata che interferisce con i servizi di produzione.

  1. Crea una nuova rete VPC per ospitare l'istanza clonata:

    gcloud compute networks create debug-network
    

    Sostituisci NETWORK_NAME con il nome che vuoi dare alla nuova rete.

  2. Aggiungi una regola firewall per consentire le connessioni SSH alla rete:

    gcloud compute firewall-rules create debug-network-allow-ssh \
       --network debug-network \
       --allow tcp:22
    
  3. Crea uno snapshot del disco di avvio.

    gcloud compute disks snapshot BOOT_DISK_NAME \
       --snapshot-names debug-disk-snapshot
    

    Sostituisci BOOT_DISK_NAME con il nome del disco di avvio.

  4. Crea un nuovo disco con lo snapshot che hai appena creato:

    gcloud compute disks create example-disk-debugging \
       --source-snapshot debug-disk-snapshot
    
  5. Crea una nuova istanza di debug senza un indirizzo IP esterno:

    gcloud compute instances create debugger \
       --network debug-network \
       --no-address
    
  6. Collega il disco di debug all'istanza:

    gcloud compute instances attach-disk debugger \
       --disk example-disk-debugging
    
  7. Segui le istruzioni per connetterti a una VM utilizzando un bastion host.

  8. Dopo aver eseguito l'accesso all'istanza del debugger, risolvi i problemi relativi all'istanza. Ad esempio, puoi esaminare i log dell'istanza:

    sudo su -
    
    mkdir /mnt/VM_NAME
    
    mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/VM_NAME
    
    cd /mnt/VM_NAME/var/log
    
    # Identify the issue preventing ssh from working
    ls
    

    Sostituisci VM_NAME con il nome della VM a cui non riesci a connetterti.

Utilizzare uno script di avvio

Se nessuno dei passaggi precedenti ha risolto il problema, puoi creare uno script di avvio per raccogliere informazioni subito dopo l'avvio dell'istanza. Segui le istruzioni per eseguire uno script di avvio.

Successivamente, devi anche reimpostare l'istanza prima che i metadati vengano applicati utilizzando gcloud compute instances reset.

In alternativa, puoi anche ricreare l'istanza eseguendo uno script di avvio diagnostico:

  1. Esegui gcloud compute instances delete con il flag --keep-disks.

    gcloud compute instances delete VM_NAME \
       --keep-disks boot
    

    Sostituisci VM_NAME con il nome della VM a cui non riesci a connetterti.

  2. Aggiungi una nuova istanza con lo stesso disco e specifica lo script di avvio.

    gcloud compute instances create NEW_VM_NAME \
       --disk name=BOOT_DISK_NAME,boot=yes \
       --metadata startup-script-url URL
    

    Sostituisci quanto segue:

    • NEW_VM_NAME è il nome della nuova VM che stai creando
    • BOOT_DISK_NAME è il nome del disco di avvio della VM a cui non riesci a connetterti
    • URL è l'URL di Cloud Storage dello script, in formato gs://BUCKET/FILE o https://storage.googleapis.com/BUCKET/FILE.

Utilizzare il disco su una nuova istanza

Se devi ancora recuperare i dati dal disco di avvio permanente, puoi scollegarlo e collegarlo come disco secondario a una nuova istanza.

  1. Elimina la VM a cui non riesci a connetterti e conserva il relativo disco di avvio:

    gcloud compute instances delete VM_NAME \
       --keep-disks=boot 

    Sostituisci VM_NAME con il nome della VM a cui non riesci a connetterti.

  2. Crea una nuova VM con il disco di avvio della VM precedente. Specifica il nome del disco di avvio della VM appena eliminata.

  3. Connettiti alla nuova VM tramite SSH:

    gcloud compute ssh NEW_VM_NAME
    

    Sostituisci NEW_VM_NAME con il nome della nuova VM.

Controlla se il disco di avvio della VM è pieno

La VM potrebbe diventare inaccessibile se il disco di avvio è pieno. Questo scenario può essere difficile da risolvere perché non è sempre ovvio quando il problema di connettività della VM è dovuto a un disco di avvio pieno. Per saperne di più su questo scenario, consulta Risoluzione dei problemi relativi a una VM inaccessibile a causa di un disco di avvio pieno.

Metodi di diagnostica per le VM Windows

Reimposta i metadati SSH

Se non riesci a connetterti a una VM Windows utilizzando SSH, prova a rimuovere la chiave di metadati enable-windows-ssh e a riattivare SSH per Windows.

  1. Imposta la chiave dei metadati enable-windows-ssh su FALSE. Per informazioni su come impostare i metadati, vedi Impostare metadati personalizzati.

    Attendi qualche secondo affinché la modifica venga applicata.

  2. Riattivare SSH per Windows

  3. Riconnettiti alla VM.

Connettiti alla VM utilizzando RDP

Se non riesci a diagnosticare e risolvere la causa delle connessioni SSH non riuscite alla tua VM Windows, connettiti utilizzando RDP.

Dopo aver stabilito una connessione alla VM, esamina i log di OpenSSH.

Passaggi successivi