Ricevo errori di "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 di "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: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 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 alla connessione (timeout). Le cause più comuni di questo errore sono le seguenti:

  • Il gruppo di sicurezza o la lista di controllo degli accessi di rete (ACL) non consente l'accesso.
  • Il sistema operativo dell'istanza è dotato di un firewall.
  • È presente un firewall tra il client e il server.
  • L'host non esiste.

Messaggio di errore: "ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 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

Errore "Connessione scaduta"

In caso di errore di “Connessione scaduta”, verifica quanto segue:

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

Errore "Connessione rifiutata"

In caso di errore di "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 dell'istanza a livello di sistema operativo.

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

  • Metodo 1: usa la console seriale EC2 per Linux.
  • Metodo 2: usa la funzionalità 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 usare la console seriale EC2 per Linux per risolvere i problemi a livello di sistema operativo sui tipi di istanze basate su Nitro che sono supportati. La console seriale consente di risolvere i problemi di avvio, configurazione di rete e configurazione SSH. Puoi accedere alla console seriale utilizzando la console Amazon EC2 o l'interfaccia della linea di comando AWS (AWS CLI).

Prima di usare la console seriale, concedile l'accesso a livello di account. Quindi crea delle policy AWS Identity and Access Management (IAM) che concedano 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 la sezione Configurazione dell'accesso alla console seriale EC2. Se non è presente un account Linux con una password di accesso configurata, è necessario eseguire il comando ssm-user per reimpostare la password per un account con accesso sudo. Per maggiori informazioni sull'esecuzione dei comandi ssm-user, consulta la sezione Gestione delle autorizzazioni sudo per l'account ssm-user su Linux e macOS.

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

Quindi esegui i comandi seguenti. 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 comando seguente 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 comandi seguenti eliminano tutte le principali regole iptables. e aggiungono anche una regola che consente le connessioni SSH in entrata. Inoltre, cambiano in ACCEPT la policy predefinita della catena principale affinché l'eliminazione della regola iptables non influisca sulla connettività di rete dell'istanza. Poiché questi comandi eliminano tutte le principali regole 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 legacy netstat 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 funzionalità 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 funzionalità Gestione sessione e per un elenco completo dei prerequisiti, consulta la sezione Configurazione di Session Manager.

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 di 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 la sezione Ottengo errori durante il tentativo di connettermi alla mia istanza EC2 tramite SSH. Come posso utilizzare il flusso di lavoro di 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 archivio dell'istanza, tali dati verranno 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.
  • 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 prima di iniziare i passaggi di risoluzione.
  • L'arresto e l'avvio dell'istanza modificano l'indirizzo IP pubblico dell'istanza. Quando si instrada il traffico esterno verso l'istanza è consigliabile utilizzare un indirizzo IP elastico anziché un indirizzo IP pubblico.

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.    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
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 principali regole 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 nella sezione Metodo 4: usa uno script di dati utente.

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

Informazioni correlate

Errore di connessione all'istanza: Connessione scaduta

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

In che modo posso risolvere i problemi di connessione alla mia istanza Linux Amazon EC2 tramite SSH?

Perché la mia istanza Linux EC2 è irraggiungibile e non supera i controlli di stato?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa