Ricevo errori "Connessione rifiutata" o "Connessione scaduta" quando provo a connettermi alla mia istanza EC2 con SSH. Come faccio a risolvere questo problema?

9 minuti di lettura
0

Ricevo errori "Connessione rifiutata" o "Connessione scaduta" quando provo a connettermi alla mia istanza Amazon Elastic Compute Cloud (Amazon EC2) tramite SSH.

Breve descrizione

Messaggio di errore: "ssh: connettiti all'host ec2-X-X-X-X.compute-1.amazonaws.com porta 22: connessione scaduta". Questo messaggio di errore proviene dal client SSH. L'errore indica che il server non ha risposto al client e il programma client ha rinunciato (timeout). Le cause più comuni di questo errore sono le seguenti:

  • Il gruppo di sicurezza o l'ACL di rete non consentono l'accesso.
  • Il sistema operativo dell'istanza è dotato di un firewall.
  • C'è un firewall tra il client e il server.
  • L'host non esiste.

Messaggio di errore: "ssh: connettiti all'host ec2-X-X-X-X.compute-1.amazonaws.com porta 22: connessione rifiutata". Questo messaggio proviene da remoto da un host. Le cause più comuni di questo errore sono le seguenti:

  • L'host ha raggiunto l'istanza ma nessun servizio è in ascolto sulla porta SSH.
  • Un firewall ha bloccato la connessione ed è stato impostato per rifiutare il pacchetto invece di eliminarlo.

Risoluzione

Per l'errore “Connessione scaduta”, verifica quanto segue

Nota: Gli ultimi due passaggi di verifica richiedono l'accesso a livello di sistema operativo dell'istanza.

Per l'errore “Connessione rifiutata”, verifica quanto segue

  • Non è presente alcun firewall sull'istanza che rifiuta la connessione SSH.
  • Il daemon SSH (sshd) è in esecuzione e in ascolto sulla porta 22.

Nota: Entrambi i passaggi di verifica richiedono l'accesso a livello di sistema operativo dell'istanza.

Se l'istanza supera entrambi i controlli dell'integrità, utilizza uno dei quattro metodi elencati di seguito con la tua configurazione

  • Metodo 1: Usa la console seriale EC2 per Linux.
  • Metodo 2: Usa la Gestione sessione di AWS Systems Manager.
  • Metodo 3: Esegui il runbook di automazione AWSSupport-TroubleshootSSH.
  • Metodo 4: Usa uno script di dati utente.

Metodo 1: Usa la console seriale EC2 per Linux

Se configurata, puoi utilizzare la console seriale EC2 per Linux per risolvere i problemi a livello di sistema operativo sui tipi di istanze basate su Nitro supportati. La console seriale consente di risolvere i problemi di avvio, di configurazione di rete e di configurazione SSH. Puoi accedere alla console seriale utilizzando la console Amazon EC2 o l'interfaccia della linea di comando AWS (AWS CLI).

Prima di utilizzare la console seriale, concedi l'accesso alla console seriale a livello di account. Quindi crea delle policy AWS Identity and Access Management (IAM) che concedono l'accesso ai tuoi utenti IAM.

Nota: Ogni istanza che utilizza la console seriale deve includere almeno un utente Linux basato su password con accesso sudo.

Per maggiori informazioni sulla configurazione della console seriale EC2 per Linux, consulta Configura l'accesso alla console seriale EC2. Se non è presente un account Linux con una password di accesso configurata, è necessario eseguire ssm-user per reimpostare la password per un account con accesso sudo. Per maggiori informazioni sull'esecuzione dei comandi ssm-user, consulta Gestione delle autorizzazioni dell'account sudo ssm-user su Linux e macOS.

Dopo la configurazione, connettiti all'istanza EC2 tramite la console seriale EC2 utilizzando un utente Linux configurato con una password.

Esegui i seguenti comandi. Questi comandi verificano che le connessioni SSH non vengano bloccate dal firewall del sistema operativo o dal wrapper TCP. I comandi verificano anche che il servizio sshd sia in esecuzione e in ascolto sulla porta 22.

1.    Se hai configurato le regole iptables, esegui il seguente comando per aggiungere una regola in iptables che accetti tutte le connessioni SSH sulla porta predefinita 22:

$ sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

Poiché è consigliabile utilizzare gruppi di sicurezza anziché un firewall basato sul sistema operativo, il firewall può essere disattivato completamente. Per disattivare il firewall basato sul sistema operativo, utilizza uno dei seguenti set di comandi, a seconda del sistema operativo:

Importante: I seguenti comandi eliminano tutte le regole iptables principali. Aggiungono anche una regola che consente le connessioni SSH in entrata. Inoltre, modificano la policy predefinita della catena principale in ACCETTA, in modo che l'eliminazione della regola iptables non influisca sulla connettività di rete dell'istanza. Poiché questi comandi eliminano tutti i principali iptables, eliminano anche tutte le regole esistenti.

Distribuzioni che utilizzano UFW (Ubuntu, Debian)

$ sudo iptables -F
$ sudo iptables -P INPUT ACCEPT
$ sudo ufw disable

Distribuzioni che utilizzano firewalld (Red Hat, CentOS)

$ sudo iptables -F
$ sudo iptables -P INPUT ACCEPT
$ sudo systemctl disable firewalld

Nota: Dopo aver riottenuto l'accesso alla tua istanza, rivedi la configurazione del firewall (UFW, firewalld, iptables).

2.    Verifica che SSH sia in esecuzione e che la porta TCP SSH (22) sia in stato di ascolto:

$ sudo systemctl restart sshd
$ sudo ss -tpln | grep -iE '22|ssh'
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1901,fd=3))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1901,fd=4))

Nota: Se il tuo sistema non dispone del comando ss, puoi utilizzare il comando netstat precedente con la stessa sintassi mostrata nell'esempio precedente.

3.    Assicurati che il wrapper TCP non blocchi una connessione SSH:

$ if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\
then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi

4.    Quindi, connettiti all'istanza tramite SSH.

5.    Disconnetti la sessione della console seriale EC2 se non è più necessaria.

Metodo 2: Usa la Gestione sessione di AWS Systems Manager

Nota: Per utilizzare questo metodo, l'istanza deve essere un'istanza gestita da SSM e lo stato ping dell'agente SSM deve essere online. Per maggiori informazioni sulla Gestione sessione e per un elenco completo dei prerequisiti, consulta Configurazione della Gestione sessione.

Per confermare che le connessioni SSH non siano bloccate dal firewall o dal wrapper TCP e che il servizio sshd sia in esecuzione e in ascolto sulla porta 22:

1.    Apri AWS Systems Manager.

2.    Avvia una sessione per l'istanza utilizzando Gestione sessione.

3.    Segui i passaggi da 1 a 4 del Metodo 1: Usa la console seriale EC2 per Linux.

4.    Chiudi la sessione della Gestione sessione se non è più necessaria.

Metodo 3: Esegui il runbook AWSSupport-TroubleshootSSH

Il runbook di automazione AWSSupport-TroubleshootSSH installa lo strumento Amazon EC2Rescue per Linux sull'istanza. Questo strumento verifica e tenta di risolvere i problemi che impediscono una connessione remota a un host Linux tramite SSH.

Per eseguire il runbook AWSSupport-TroubleshootSSH:

1.    Apri la pagina AWSSupport-TroubleshootSSH.

2.    Seleziona Esegui questa automazione (console).

Per maggiori informazioni, consulta Ricevo errori quando tento di connettermi alla mia istanza EC2 tramite SSH. Come posso utilizzare il flusso di lavoro dell'automazione AWSSupport-TroubleshootSSH per risolvere i problemi di connessione SSH?

Metodo 4: Usa uno script di dati utente

Se nessuno dei metodi descritti è adatto al tuo ambiente, utilizza uno script di dati utente EC2. Lo script di dati utente EC2 disattiva il firewall a livello di sistema operativo e il wrapper TCP, quindi riavvia il servizio sshd.

Importante:

  • Questa procedura richiede l'arresto e l'avvio dell'istanza EC2. Se l'istanza contiene dati archiviati su volumi di archiviazione dell'istanza, tali dati vengono eliminati dopo l'arresto dell'istanza.
  • Se l'istanza fa parte di un gruppo con dimensionamento automatico Amazon EC2, la chiusura dell'istanza potrebbe anche interrompere le istanze all'interno del gruppo con dimensionamento automatico.
  • Se l'istanza viene avviata da servizi che utilizzano il dimensionamento automatico AWS, la chiusura dell'istanza potrebbe anche interrompere le istanze all'interno del gruppo con dimensionamento automatico.
  • La chiusura dell'istanza dipende dalle impostazioni di protezione scalabile dell'istanza per il gruppo con dimensionamento automatico. Se l'istanza fa parte di un gruppo con dimensionamento automatico, rimuovi temporaneamente l'istanza dal gruppo con dimensionamento automatico prima di iniziare i passaggi di risoluzione.
  • L'arresto e l'avvio dell'istanza modificano l'indirizzo IP pubblico dell'istanza. È consigliabile utilizzare un indirizzo IP elastico anziché un indirizzo IP pubblico quando si instrada il traffico esterno verso l'istanza.

Segui questi passaggi per configurare i dati utente per l'istanza:

1.    Apri la console Amazon EC2.

2.    Seleziona Istanze nel pannello di navigazione, quindi seleziona l'istanza a cui intendi connetterti.

3.    Arresta l'istanza.

4.    Seleziona Azioni, Impostazioni dell'istanza, Modifica dati utente.

5.    Copia il seguente script di dati utente nella finestra di dialogo Modifica dati utente, quindi seleziona 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
iptables -P INPUT ACCEPT
iptables -F
systemctl restart sshd.service || service sshd restart
if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\
then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi
--//

6.    Connettiti all'istanza tramite SSH.

7.    Lo script di dati utente precedente è impostato per essere eseguito a ogni riavvio dell'istanza. Dopo aver riottenuto l'accesso all'istanza, rimuovi lo script di dati utente.

Nota: Il comando precedente cancella tutte le regole principali di iptables. Dopo aver riottenuto l'accesso all'istanza, verifica la precisione della configurazione del firewall (ad esempio, UFW, firewalld, iptables).

Per rimuovere i dati utente:

1.    Completa i passaggi 1-4 del Metodo 4: Utilizza una sezione dello script di dati utente.

2.    Elimina lo script di dati utente nella finestra di dialogo Modifica dati utente.

Informazioni correlate

Errore durante la connessione alla tua istanza: connessione scaduta

Come posso risolvere gli errori di timeout della connessione dell'istanza Amazon EC2 da Internet?

Perché non riesco a connettermi alla mia istanza Amazon EC2 Linux tramite SSH?

Perché la mia istanza EC2 Linux è irraggiungibile e non riesce a controllare uno o entrambi i suoi stati?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa