Ir para o conteúdo

Como soluciono os erros de “Connection refused” ou “Connection timed out” ao tentar me conectar à minha instância do EC2 usando SSH?

8 minuto de leitura
0

Estou recebendo os erros “Connection refused” ou “Connection timed out” ao tentar me conectar à minha instância do Amazon Elastic Compute Cloud (Amazon EC2) usando SSH.

Breve descrição

Se sua conexão expirar, você receberá a seguinte mensagem de erro do cliente SSH:

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

O erro Connection timed out ocorre quando o servidor não responde ao cliente e o programa cliente desiste (expira).

Se um host recusar remotamente sua conexão, você receberá a seguinte mensagem de erro:

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

Resolução

Erro “Connection timed out”

Se você receber o erro Connection timed out, verifique as seguintes configurações:

Observação: para verificar se há problemas com o firewall ou os TCP Wrappers, você deve ter acesso ao sistema operacional (SO) da instância.

Erro “Connection refused”

Se você receber o erro Connection refused, verifique as seguintes configurações:

  • Não há um firewall na instância que bloqueie a conexão SSH.
  • O daemon SSH (sshd) está sendo executado e escutando na porta 22.

Observação: para verificar as configurações anteriores, você precisa ter acesso à instância no nível do sistema operacional.

Solucionar problemas com instâncias que passam em ambas as verificações de integridade

Para solucionar problemas com instâncias que passam nas verificações de integridade, use um dos seguintes métodos de solução de problemas.

Execute o runbook AWSSupport-TroubleshootSSH

É uma prática recomendada executar o runbook de automação AWSSupport-TroubleshootSSH. O runbook instala a ferramenta Amazon EC2Rescue em sua instância para identificar e corrigir problemas que bloqueiam uma conexão SSH remota com um host Linux.

Use o Console de Série do EC2 para Linux

Use o Console de Série do EC2 para Linux para solucionar problemas no nível do sistema operacional, como problemas de inicialização, problemas de configuração de rede e problemas de configuração de SSH em tipos de instância compatíveis.

Pré-requisitos:

  • Conceda acesso ao console no nível da conta da AWS.
  • Crie políticas do AWS Identity and Access Management (AWS IAM) que concedam acesso ao console aos seus usuários do IAM.
    Observação: cada instância que usa o Console de Série do EC2 deve ter pelo menos um usuário Linux baseado em senha com acesso sudo.

Para obter mais informações, consulte Configurar o acesso ao Console de Série do EC2.

Se não houver uma conta Linux com uma senha de login configurada, você deve executar ssm-user para redefinir a senha de uma conta com acesso sudo.

Para verificar se sua configuração não está bloqueando o acesso SSH, conclua as seguintes etapas:

  1. Use o Console de Série do EC2 para se conectar à instância do EC2 como um usuário Linux configurado por senha.

  2. Se você configurou as regras do iptables, execute o seguinte comando para adicionar uma regra no iptables que aceite todas as conexões SSH na porta 22:

    sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
  3. Se você usa um firewall baseado em sistema operacional, desative-o. É uma prática recomendada usar grupos de segurança em vez de um firewall. Para desativar seu firewall baseado no sistema operacional, execute os seguintes comandos com base no seu sistema operacional.
    Importante: os comandos a seguir limpam todas as regras principais do iptables e excluem as regras existentes. Os comandos também adicionam uma regra que permite conexões SSH de entrada e alteram a política padrão da cadeia principal para ACEITAR. Essa configuração garante que você não afete a conectividade de rede da instância ao limpar a regra iptables.
    Distribuições que usam UFW, como Ubuntu e Debian:

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

    Distribuições que usam firewalld, como Red Hat Enterprise Linux (RHEL) e CentOS:

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

    Observação: depois de recuperar o acesso à sua instância, verifique a configuração do firewall.

  4. Para verificar se o SSH está em execução e se a porta 22 do SSH TCP está no estado de escuta, execute o seguinte 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))

    Observação: se seu sistema não tiver o comando ss, substitua ss pelo comando netstat legado. Certifique-se de usar a mesma sintaxe do comando anterior.

  5. Para garantir que o TCP Wrapper não bloqueie uma conexão SSH, execute o seguinte 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. Use SSH para se conectar à instância.

  7. Desconecte-se da sessão do Console de Série do EC2.

Use o Systems Manager

Pré-requisitos: Para usar o Gerenciador de Sessões, um recurso do AWS Systems Manager, sua instância deve ser um nó gerenciado. O status de ping do AWS Systems Manager Agent (SSM Agent) da instância deve ser On-line, e o perfil do IAM anexado deve ter permissões AmazonSSMManagedInstanceCore. Certifique-se de cumprir todos os pré-requisitos do Gerenciador de Sessões.

Use o Gerenciador de Sessões para iniciar uma sessão para acessar a instância.

Use um script de dados do usuário

Se você não puder usar os métodos de solução de problemas anteriores, use um script de dados do usuário para desativar o firewall no nível do sistema operacional e o TCP Wrapper. Reinicie o serviço sshd.

Importante: antes de interromper e executar sua instância, execute as seguintes ações:

Observação: quando você interrompe ou executa uma instância, o endereço IP público da instância muda. Ao rotear tráfego externo para sua instância, é uma prática recomendada usar um endereço IP elástico em vez de um endereço IP público.

Para configurar os dados do usuário para a instância, conclua as seguintes etapas:

  1. Abra o console do Amazon EC2.
  2. No painel de navegação, escolha Instâncias e, em seguida, selecione sua instância.
  3. Interrompa a instância.
  4. Escolha Ações e, em seguida, escolha Configurações da instância.
  5. Escolha Editar dados do usuário e insira o seguinte script de dados do usuário:
    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
    --//
    Observação: o script de dados do usuário anterior está configurado para ser executado a cada reinicialização da instância. Esse método remove todas as regras principais do iptables.
  6. Escolha Salvar.
  7. Use SSH para se conectar à instância.
  8. Depois de recuperar o acesso à instância, remova o script de dados do usuário e verifique se a configuração do firewall está correta.

Informações relacionadas

Erro ao se conectar à sua instância: limite de tempo da conexão atingido

Como soluciono erros de tempo de conexão esgotado da instância do Amazon EC2 na Internet?

Como posso solucionar problemas de conexão com minha instância Linux do Amazon EC2 usando SSH?

Por que minha instância Linux do EC2 está inacessível e falhando suas verificações de status?