Salta al contenuto

Come posso risolvere gli errori "Connection refused" o "Connection timed out" quando utilizzo SSH per connettermi alla mia istanza EC2?

7 minuti di lettura
0

Quando utilizzo SSH per connettermi alla mia istanza Amazon Elastic Compute Cloud (Amazon EC2), ricevo errori "Connection refused" o "Connection timed out".

Breve descrizione

Se la connessione si interrompe, ricevi il seguente messaggio di errore dal client SSH:

"ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection timed out"

L'errore Connection timed out si verifica quando il server non risponde al client e il programma client si arrende (timeout).

Se un host rifiuta la connessione da remoto, ricevi il seguente messaggio di errore:

"ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection refused"

Risoluzione

Errore "Connection timed out"

Se ricevi l'errore Connection timed out, verifica le seguenti configurazioni:

Nota: per verificare eventuali problemi con il firewall o i wrapper TCP, devi avere accesso all'istanza a livello di sistema operativo.

Errore "Connection refused"

Se ricevi l'errore Connection refused, verifica le seguenti configurazioni:

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

Nota: per verificare le configurazioni precedenti, devi avere accesso all'istanza a livello di sistema operativo.

Risolvi i problemi relativi alle istanze che superano entrambi i controlli dell'integrità

Per risolvere i problemi relativi alle istanze che superano i controlli dell'integrità, utilizza uno dei seguenti metodi di risoluzione.

Esegui il runbook AWSSupport-TroubleshootSSH

È consigliabile eseguire il runbook di automazione AWSSupport-TroubleshootSSH. Il runbook installa lo strumento Amazon EC2Rescue sull'istanza per identificare e risolvere i problemi che bloccano una connessione SSH remota a un host Linux.

Utilizza la Console seriale EC2 per Linux

Per risolvere problemi a livello di sistema operativo come problemi di avvio, problemi di configurazione di rete e problemi di configurazione SSH sui tipi di istanza supportati, utilizza la Console seriale EC2 per Linux.

Prerequisiti:

  • Concedi l'accesso alla console a livello di account AWS.
  • Crea policy AWS Identity and Access Management (AWS IAM) che concedano l'accesso alla console agli utenti IAM.
    Nota: ogni istanza che utilizza la Console seriale EC2 deve avere almeno un utente Linux basato su password con accesso sudo.

Per ulteriori informazioni, consulta Configura l'accesso alla Console seriale EC2.

Se non è presente un account Linux con una password di accesso configurata, devi eseguire il comando ssm-user per reimpostare la password per un account con accesso sudo.

Per verificare che la configurazione non stia bloccando l'accesso SSH, completa i seguenti passaggi:

  1. Utilizza la Console seriale EC2 per connetterti all'istanza EC2 come utente Linux configurato con password.

  2. Se hai configurato le regole di iptables, esegui questo comando per aggiungere una regola in iptables che accetti tutte le connessioni SSH sulla porta 22:

    sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
  3. Se utilizzi un firewall basato sul sistema operativo, disattivalo. È consigliabile utilizzare gruppi di sicurezza anziché un firewall. Per disattivare il firewall basato sul sistema operativo, esegui questi comandi a seconda del sistema operativo utilizzato.
    Importante: i seguenti comandi cancellano tutte le principali regole di iptables ed eliminano le regole esistenti. I comandi aggiungono anche una regola che consente le connessioni SSH in entrata e modificano la policy predefinita della catena principale in ACCEPT. Grazie a configurazione, la connettività di rete dell'istanza non subisce alcuna variazione quando cancelli la regola di iptables.
    Distribuzioni che utilizzano UFW come Ubuntu e Debian:

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

    Distribuzioni che utilizzano firewalld come Red Hat Enterprise Linux (RHEL) e CentOS:

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

    Nota: dopo aver riottenuto l'accesso all'istanza, controlla la configurazione del firewall.

  4. Per verificare che SSH sia in esecuzione e che la porta SSH TCP 22 sia in stato di ascolto, esegui questo comando:

    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 sistema non ha il comando ss, sostituisci ss con il comando netstat legacy. Assicurati di utilizzare la stessa sintassi del comando precedente.

  5. Per accertarti che il wrapper TCP non blocchi una connessione SSH, esegui questo comando:

    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. Utilizza SSH per connetterti all'istanza.

  7. Disconnettiti dalla sessione della Console seriale EC2.

Utilizza Systems Manager

Prerequisiti: per utilizzare Gestione sessione, una funzionalità di AWS Systems Manager, l'istanza deve essere un nodo gestito. Lo stato di ping dell'Agente AWS Systems Manager (Agente SSM) dell'istanza deve essere Online e il ruolo IAM associato deve disporre delle autorizzazioni AmazonSSMManagedInstanceCore. Assicurati di rispettare tutti i prerequisiti di Gestione sessione.

Utilizza Gestione sessione per avviare una sessione e per accedere all'istanza.

Utilizza uno script con dati utente

Se non riesci a utilizzare i metodi di risoluzione precedenti, utilizza uno script con dati utente per disattivare il firewall a livello di sistema operativo e il wrapper TCP. Riavvia il servizio sshd.

Importante: prima di arrestare e avviare l'istanza, intraprendi le seguenti azioni:

Nota: quando arresti e avvii un'istanza, l'indirizzo IP pubblico dell'istanza cambia. È consigliabile utilizzare un indirizzo IP elastico per indirizzare il traffico esterno all'istanza anziché un indirizzo IP pubblico.

Per configurare i dati utente per l'istanza, completa i seguenti passaggi:

  1. Apri la console Amazon EC2.
  2. Seleziona Istanze dal pannello di navigazione, quindi seleziona l'istanza.
  3. Arresta l'istanza.
  4. Scegli Operazioni, quindi scegli Impostazioni dell'istanza.
  5. Scegli Modifica dati utente, quindi inserisci il seguente script con dati utente:
    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
    --//
    Nota: lo script con dati utente precedente è impostato per essere eseguito al riavvio di ogni istanza. Questo metodo rimuove tutte le principali regole di iptables.
  6. Scegli Salva.
  7. Utilizza SSH per connetterti all'istanza.
  8. Dopo aver riottenuto l'accesso all'istanza, rimuovi lo script con dati utente e verifica che la configurazione del firewall sia esatta.

Informazioni correlate

Errore di connessione all'istanza: Connection timed out

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 EC2 Linux è irraggiungibile e non supera i controlli di stato?