Quando tento di accedere alla mia istanza EC2 ricevo gli errori "Permission denied (publickey)" o "Authentication failed, permission denied". Come posso risolvere questo problema?

Ultimo aggiornamento: 20/05/2022

Quando provo ad accedere alla mia istanza Amazon Elastic Compute Cloud (Amazon EC2) ricevo gli errori "Permission denied (publickey)" (Autorizzazione negata (publickey)) o "Authentication failed, permission denied" (Autenticazione non riuscita, autorizzazione negata). Come posso risolvere questo problema?

Breve descrizione

Gli errori "Permission denied (publickey)" e "Authentication failed, permission denied" si verificano se:

  • Stai tentando di connetterti utilizzando un nome utente errato per la tua AMI.
  • Le autorizzazioni dei file all'interno del sistema operativo non sono corrette sull'istanza.
  • Il file della chiave pubblica SSH (.pub) errato si trova nel file authorized_keys.

Risoluzione

Verifica di utilizzare il nome utente corretto per l’AMI

Verifica che le autorizzazioni del file all'interno del sistema operativo siano corrette e che la chiave SSH pubblica sia nel file authorized_keys

Esistono quattro metodi per eseguire questi processi:

Metodo 1: utilizza la Console seriale EC2

Se attivi la Console seriale EC2 per Linux, puoi utilizzarla per risolvere i problemi relativi ai tipi di istanze basate su Nitro supportati. La console seriale permette di risolvere problemi di avvio, di configurazione di rete e di configurazione di SSH. La console seriale si connette all'istanza senza bisogno di una connessione di rete funzionante. Puoi accedere alla console seriale utilizzando la console Amazon EC2 o l'AWS Command Line Interface (AWS CLI).

Prima di utilizzare la console seriale, concedi l'accesso a livello di account. Quindi crea le policy AWS Identity and Access Management (IAM) consentendo l'accesso agli utenti IAM. Inoltre, ogni istanza che utilizza la console seriale deve includere almeno un utente basato su password. Se l’istanza non è raggiungibile e non hai configurato l’accesso alla console seriale, segui le istruzioni del Metodo 2, 3 o 4. Per informazioni sulla configurazione della Console seriale EC2 per Linux, consulta Configura l'accesso alla Console seriale EC2.

Nota: se ricevi un messaggio di errore durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Metodo 2: utilizza AWS Systems Manager Session Manager per accedere all'istanza e apportare correzioni

Questo metodo aggiorna le autorizzazioni e inserisce la chiave pubblica SSH nel file authorized_keys.

Nota: per utilizzare questo metodo è necessaria l'installazione diSSM Agent. Per ulteriori informazioni su Session Manager e un elenco completo dei prerequisiti, consulta Impostazione di Session Manager.

1.    Apri la console di AWS Systems Manager.

2.    Avvia una sessione.

3.    Utilizza il comando ls -ld per assicurarti che le autorizzazioni dei file sotto la directory home siano corrette. Di seguito è riportato un elenco delle autorizzazioni corrette:

  • La directory home di Linux, /home, ad esempio, dovrebbe essere (0755/drwxr-xr-x).
  • La directory home dell'utente, /home/ec2-user/, ad esempio, dovrebbe essere (0700/drwx—).
  • L'autorizzazione per la directory .ssh, /home/ec2-user/.ssh, ad esempio, dovrebbe essere (0700/drwx—).
  • L’autorizzazione per il file authorized_keys, /home/ec2-user/.ssh/authorized_keys, ad esempio, dovrebbe essere (0600/-rw-------).

Di seguito è riportato un esempio del comando ls -ld e dell'output risultante. In questo esempio, ec2-user è il nome utente. Modifica il nome utente in base all'AMI specifica.

$ ls -ld /home/ec2-user/
drwx------ 3 ec2-user ec2-user 4096 Apr  1 08:31 /home/ec2-user/

4.    Verifica la chiave pubblica SSH sul computer locale.

5.    Se la firma della chiave pubblica SSH non è presente nell'output, aggiorna il file authorized_keys per autorizzare la chiave SSH. Nel seguente esempio, sostituisci la chiave di esempio con una chiave SSH pubblica.

$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys

6.    Per correggere le autorizzazioni, esegui i seguenti comandi sull’istanza EC2.

$ sudo chown root:root /home
$ sudo chmod 755 /home
$ sudo chown ec2-user:ec2-user /home/ec2-user -R
$ sudo chmod 700 /home/ec2-user /home/ec2-user/.ssh
$ sudo chmod 600 /home/ec2-user/.ssh/authorized_keys

7.    Termina la sessione.

8.    Connettiti all'istanza utilizzando SSH.

Metodo 3: esegui la procedura documento di automazione AWSSupport-TroubleshootSSH

AWSSupport-TroubleshootSSH installa lo strumento Amazon EC2Rescue. Dopo l’installazione, questo strumento controlla e corregge i problemi che causano gli errori di connessione remota quando si effettua la connessione a una macchina Linux tramite SSH. Per ulteriori informazioni, consulta Come posso utilizzare il flusso di lavoro di automazione AWSSupport-TroubleshootSSH per risolvere i problemi di connessione SSH?

Metodo 4: utilizza uno script di dati utente per ripristinare le autorizzazioni SSH e aggiungere la chiave pubblica SSH corretta al file authorized_keys

Importante

  • Se l'istanza è supportata da istanza store o ha volumi di archivio istanza contenenti dati, i dati andranno perduti quando l'istanza verrà interrotta. Per ulteriori informazioni, consulta Determina il tipo di dispositivo root dell'istanza.
  • Se l'istanza fa parte di un gruppo Amazon EC2 Auto Scaling, arrestare l'istanza potrebbe interromperla. Le istanze avviate con Amazon EMR, AWS CloudFormation o AWS Elastic Beanstalk potrebbero far parte di un gruppo AWS Auto Scaling. La terminazione dell'istanza in questo scenario dipende dalle impostazioni di protezione con scalabilità in base all'istanza per il gruppo Auto Scaling. Se l'istanza fa parte di un gruppo Auto Scaling, rimuovi temporaneamente l'istanza dal gruppo Auto Scaling prima di iniziare i passaggi di risoluzione.
  • L'arresto e l'avvio dell'istanza modificano l'indirizzo IP pubblico dell'istanza. È una best practice l'utilizzo di un indirizzo IP elastico al posto di un indirizzo IP pubblico quando si effettua il routing del traffico esterno verso l'istanza.

1.    Apri la console di Amazon EC2.

2.    Scegli Istanze dal pannello di navigazione, quindi seleziona l'istanza a cui stai tentando di connetterti.

3.    Interrompi l'istanza.

4.    Scegli Operazioni, Impostazioni istanza, Modifica dati utente.

5.    Copia il seguente script di dati utente nella finestra di dialogo Modifica dati utente, quindi scegli Salva.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home 
chmod 755 /home
chown $OS_USER:$OS_USER /home/$OS_USER -R
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
--//

Nota: sostituisci il valore di OS_USER con il nome utente associato all'AMI da cui è stata avviata l'istanza. Per ulteriori informazioni, consulta Ottieni il nome utente predefinito per l'AMI utilizzata per avviare l'istanza in Cause comuni di problemi di connessione.

6.    Verifica la chiave pubblica SSH sul computer locale.

7.    Se la firma della chiave SSH pubblica non è presente nell’output, aggiungi la chiave corretta allo script di dati utente creato nella fase 5. Se la firma corrisponde puoi saltare questo passaggio. Aggiungi la chiave SSH pubblica ad uno script di dati utente come mostrato nell’esempio seguente. Sostituisci la chiave di esempio con una chiave SSH pubblica.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home 
chmod 755 /home
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/$OS_USER/.ssh/authorized_keys
chown $OS_USER:$OS_USER/ home/$OS_USER -R
--//

Nota: sostituisci il valore di OS_USER con il nome utente associato all'AMI da cui è stata avviata l'istanza. Per ulteriori informazioni, consulta Ottieni il nome utente predefinito per l'AMI utilizzata per avviare l'istanza in Cause comuni di problemi di connessione.

8.    Avvia l’istanza.

Nota: il precedente script di dati utente è impostato per funzionare su ogni riavvio di istanza. Dopo aver riottenuto l'accesso all'istanza, rimuovi lo script dei dati utente.

Per rimuovere i dati utente:

  • Completa le fasi 1–4 in questa sezione.
  • Elimina lo script di dati utente nella finestra di dialogo Modifica dati utente.