Ricevo errori "Connessione rifiutata" o "Connessione scaduta" quando provo a connettermi alla mia istanza EC2 con SSH. Come faccio a risolvere questo problema?
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
- L'indirizzo IP o il nome host dell'istanza sono corretti.
- L'istanza sta superando i controlli dell'integrità.
- Il gruppo di sicurezza dell'istanza consente il traffico in entrata sulla porta TCP 22.
- Le ACL di rete della sottorete dell'istanza consentono il traffico in entrata sulla porta TCP 22 e una porta effimera per il traffico in uscita.
- La tabella di routing della sottorete dell'istanza è configurata correttamente per fornire connettività tra l'istanza EC2 e il client SSH.
- Non esiste un firewall che blocchi la connessione tra il client SSH e l'istanza EC2.
- SSH non è bloccato dai wrapper TCP dell'istanza (sul sito Red Hat).
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.
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?

Contenuto pertinente
- AWS UFFICIALEAggiornata 3 mesi fa
- In che modo posso risolvere i problemi di connessione alla mia istanza Linux Amazon EC2 tramite SSH?AWS UFFICIALEAggiornata 6 mesi fa
- AWS UFFICIALEAggiornata un anno fa