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: 04-05-2021

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

Breve descrizione

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

  • Provi a connetterti utilizzando un nome utente errato per l’AMI.
  • Le autorizzazioni sull’istanza non sono corrette.
  • Il file errato della chiave SSH pubblica (.pub) è nel file authorized_keys .

Risoluzione

Verifica di utilizzare il nome utente corretto per l’AMI

Verifica che le autorizzazioni dell’istanza siano corrette e che la chiave SSH pubblica sia nel file authorized_keys

Esistono quattro metodi per eseguire queste operazioni:

Metodo 1: Utilizzo della console seriale EC2

Se hai abilitato la console seriale EC2 per Linux puoi utilizzarla per risolverei tipi di istanza supportarti basati su Nitro. 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. È possibile accedere alla console seriale utilizzando la console Amazon EC2 o 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 Configurazione dell'accesso alla console seriale EC2.

Nota: Se ricevi errori nell’esecuzione di comandi AWS CLI assicurati di utilizzare l’ultima versione di AWS CLI.

Metodo 2: Utilizza AWS Systems Manager Session Manager per accedere all’istanza ed effettuare correzioni

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

Nota: L’installazione dell’agente SSM è richiesta per utilizzare questo metodo. Per ulteriori informazioni su Session Manager e un elenco completo di prerequisiti, consulta Impostazione di Session Manager.

1.    Apri la console AWS Systems Manager.

2.    Avvio di una sessione.

3.    Utilizza il comando ls -ld per assicurarti che le autorizzazioni dei file sotto la directory home siano corrette. Di seguito è disponibile una lista di autorizzazioni corrette:

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

Di seguito è disponibile un esempio del comando ls -ld e del relativo output. 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.    Sul computer locale verifica la chiave SSH pubblica.

5.    Se la firma della chiave SSH pubblica 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.    Termine della sessione.

8.    Connettiti all’istanza tramite SSH.

Metodo 3: Esegui la procedura AWSSupport-TroubleshootSSH Automation

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 di SSH?

Metodo 4: Utilizza uno script di dati utente per riparare le autorizzazioni e aggiungi la chiave SSH pubblica corretta al file authorized_keys

Importante

  • ricorda che se l’istanza è supportata dall’archivio istanza o ha volumi di archivio istanza contenenti dati, i dati andranno perduti quando l’istanza verrà interrotta. Per ulteriori informazioni consulta Definire il tipo di dispositivo root dell'istanza .
  • Se l’istanza fa parte di un gruppo Amazon EC2 Auto Scaling, l’arresto dell’istanza potrebbe terminarla. Le istanze avviate con Amazon EMR, AWS CloudFormation o AWS Elastic Beanstalk potrebbero far parte di un gruppo AWS AutoScaling. Il termine dell’istanza in questo caso dipende dalle impostazioni di protezione di riduzione delle istanze 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 le fasi di risoluzione.
  • L’arresto e l’avvio dell’istanza modifica l’indirizzo IP pubblico dell’istanza. È una best practice l’utilizzo di un indirizzo IP elastico al posto un indirizzo IP pubblico quando si effettua il routing del traffico esterno verso l’istanza.

1.    Apri la console Amazon EC2 .

2.    Scegli Istanze dal pannello di navigazione e poi seleziona l’istanza che stai cercando di avviare.

3.    Arresto di un’istanza.

4.    Scegli Azioni, 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
chown root:root /home
chmod 755 /home
chown ec2-user:ec2-user /home/ec2-user -R
chmod 700 /home/ec2-user /home/ec2-user/.ssh
chmod 600 /home/ec2-user/.ssh/authorized_keys
--//

6.    Sul computer locale verifica la chiave SSH pubblica.

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
chown root:root /home
chmod 755 /home
chmod 700 /home/ec2-user /home/ec2-user/.ssh
chmod 600 /home/ec2-user/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys
chown ec2-user:ec2-user /home/ec2-user -R
--//

8.    Avvio dell’istanza.

Nota: il precedente script di dati utente è impostato per funzionare su ogni riavvio dell’istanza. Dopo aver riottenuto l’accesso alla tua istanza rimuovi lo script di dati utente.

Per rimuovere i dati utente:

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