Estou recebendo os erros "Connection refused" ou "A conexão expirou" ao tentar me conectar à minha instância do EC2 com SSH. Como faço para resolver isso?

10 minuto de leitura
0

Estou recebendo os erros "Connection refused" ou "A conexão expirou" ao tentar me conectar à minha instância do Amazon Elastic Compute Cloud (Amazon EC2) usando SSH.

Breve descrição

Mensagem de erro: "ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: A conexão expirou". Essa mensagem de erro vem do cliente SSH. O erro indica que o servidor não respondeu ao cliente e o programa do cliente desistiu (atingiu o tempo limite). A seguir estão as causas comuns para este erro:

  • O grupo de segurança ou a ACL de rede não permitem acesso.
  • Há um firewall no sistema operacional da instância.
  • Há um firewall entre o cliente e o servidor.
  • O host não existe.

Mensagem de erro: "ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection refused". Essa mensagem vem remotamente de um host. A seguir estão as causas comuns para este erro:

  • O host acessou a instância, mas não havia nenhum serviço escutando na porta SSH.
  • Um firewall bloqueou a conexão e foi configurado para rejeitar o pacote em vez de descartá-lo.

Resolução

Erro "A conexão expirou"

Para o erro "A conexão expirou", verifique o seguinte:

Observação: as duas últimas etapas de verificação exigem acesso à instância no nível do sistema operacional.

Erro "Connection refused"

Para o erro "Connection refused", verifique o seguinte:

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

Observação: ambas as etapas de verificação exigem acesso à instância no nível do sistema operacional.

Se a instância passar nas duas verificações de integridade, use um dos quatro métodos listados a seguir com sua configuração

  • Método 1: Use o Console de Série do EC2 para Linux.
  • Método 2: Use o Gerenciador de Sessões do AWS Systems Manager.
  • Método 3: Execute o runbook de automação AWSSupport-TroubleshootSSH.
  • Método 4: Use um script de dados do usuário.

Método 1: Use o Console de Série do EC2 para Linux

Se estiver configurado, você pode usar o Console de Série do EC2 para Linux para solucionar problemas no nível do sistema operacional em tipos de instâncias compatíveis com base em Nitro. O console de série ajuda a solucionar problemas de inicialização, configuração de rede e problemas de configuração de SSH. Você pode acessar o console de série usando o console do Amazon EC2 ou a AWS Command Line Interface (AWS CLI).

Antes de usar o console de série, conceda acesso a ele no nível da conta. Em seguida, crie políticas do AWS Identity and Access Management (IAM) concedendo acesso aos seus usuários do IAM.

Observação: cada instância que usa o console serial deve incluir pelo menos um usuário Linux baseado em senha com acesso sudo.

Para obter mais informações sobre como configurar o Console de Série do EC2 para Linux, 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 obter mais informações sobre como executar comandos ssm-user, consulte Gerenciar permissões da conta ssm-user de sudo no Linux e no macOS.

Após a configuração, conecte-se à instância do EC2 por meio do Console de Série do EC2 usando um usuário Linux configurado por senha.

Depois, execute os seguintes comandos. Esses comandos verificam se as conexões SSH não estão sendo bloqueadas pelo firewall do sistema operacional ou pelo TCP wrapper. Os comandos também verificam se o serviço sshd está em execução e escutando na porta 22.

1.    Se você tem regras de iptables configuradas, execute o seguinte comando para adicionar uma regra no iptables aceitando todas as conexões SSH na porta padrão 22:

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

Como é uma prática recomendada usar grupos de segurança em vez de um firewall baseado em sistema operacional, o firewall pode ser totalmente desativado. Para desativar o firewall baseado em sistema operacional, use um dos seguintes conjuntos de comandos, dependendo do seu sistema operacional:

Importante: os comandos a seguir eliminam todas as regras principais de iptables. Eles também adicionam uma regra que permite conexões SSH de entrada. Além disso, eles alteram a política padrão da cadeia principal para ACCEPT, de modo que a eliminação da regra de iptables não afete a conectividade de rede da instância. Como esses comandos eliminam todos os iptables principais, eles também eliminam todas as regras existentes.

Distribuições que usam UFW (Ubuntu, Debian)

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

Distribuições que usam firewalld (Red Hat, CentOS)

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

Observação: depois de recuperar o acesso à sua instância, revise sua configuração de firewall (UFW, firewalld, iptables).

2.    Verifique se o SSH está em execução e verifique se a porta SSH TCP (22) está no estado de escuta:

$ 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, você poderá usar o comando netstat herdado com a mesma sintaxe mostrada no exemplo anterior.

3.    Verifique se o TCP wrapper não está bloqueando uma conexão 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.    Em seguida, conecte-se à instância usando SSH.

5.    Desconecte a sessão do Console de Série do EC2 se ela não for mais necessária.

Método 2: Use o Gerenciador de Sessões do AWS Systems Manager

Observação: para usar esse método, a instância deve ser uma instância gerenciada por SSM e o status de ping do agente SSM deve ser Online. Para obter mais informações sobre o Session Manager e uma lista completa de pré-requisitos, consulte Configuração do Session Manager.

Para confirmar que as conexões SSH não estão sendo bloqueadas pelo firewall ou pelo TCP wrapper e se o serviço sshd está sendo executado e escutando na porta 22:

1.    Abra o AWS Systems Manager.

2.    Inicie uma sessão para a instância usando o Session Manager.

3.    Siga as etapas de 1 a 4 do Método 1: Use o Console de Série do EC2 para Linux.

4.    Feche a sessão do Session Manager se ela não for mais necessária.

Método 3: Execute o runbook AWSSupport-TroubleshootSSH

O runbook de automação AWSSupport-TroubleshootSSH instala a ferramenta Amazon EC2Rescue para Linux na instância. Essa ferramenta verifica e tenta corrigir problemas que impedem uma conexão remota com o host Linux por meio do SSH.

Para executar o runbook AWSSupport-TroubleshootSSH:

1.    Abra a página AWSSupport-TroubleshootSSH.

2.    Selecione Executar esta automação (console).

Para mais informações, consulte Estou recebendo erros ao tentar me conectar à minha instância do EC2 usando SSH. Como posso usar o fluxo de trabalho de automação AWSSupport-TroubleshootSSH para solucionar problemas de conexão SSH?

Método 4: Use um script de dados do usuário

Se nenhum dos métodos descritos for adequado para seu ambiente, use um script de dados do usuário do EC2. O script de dados do usuário do EC2 desliga o firewall no nível do sistema operacional e o TCP wrapper e, em seguida, reinicia o serviço sshd.

Importante:

  • esse procedimento requer a interrupção e o início da instância do EC2. Se a instância tiver dados armazenados em volumes de armazenamento de instância, esses dados serão excluídos após a interrupção da instância.
  • Se a instância fizer parte de um grupo do Amazon EC2 Auto Scaling, o encerramento da instância também poderá interromper as instâncias dentro do grupo do Auto Scaling.
  • Se a instância for iniciada por serviços que usam o AWS Auto Scaling, o encerramento da instância também poderá interromper as instâncias dentro do grupo do Auto Scaling.
  • O encerramento da instância depende das configurações de proteção contra a redução da escala horizontal da instância para o grupo do Auto Scaling. Se a instância fizer parte de um grupo do Auto Scaling, remova temporariamente a instância do grupo do Auto Scaling antes de iniciar as etapas de resolução.
  • O ato de interromper e iniciar a instância altera seu endereço IP público. É uma prática recomendada usar um endereço IP elástico em vez de um endereço IP público ao rotear o tráfego externo para sua instância.

Siga estas etapas para configurar os dados do usuário para a instância:

1.    Abra o console do Amazon EC2.

2.    Escolha Instâncias no painel de navegação e selecione a instância à qual você planeja se conectar.

3.    Interrompa a instância.

4.    Escolha Ações, Configurações de instância, Editar dados do usuário.

5.    Copie o seguinte script de dados do usuário para a caixa de diálogo Editar dados do usuário e escolha Salvar.

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.    Conecte-se à instância usando SSH.

7.    O script de dados do usuário anterior está configurado para ser executado em cada reinicialização da instância. Depois de recuperar o acesso à instância, remova o script de dados do usuário.

Observação: o comando anterior elimina todas as regras principais de iptables. Depois de recuperar o acesso à instância, revise a configuração do firewall para verificar a precisão (por exemplo, UFW, firewalld, iptables).

Para remover dados do usuário:

1.    Conclua as etapas de 1 a 4 da seção Método 4: Use um script de dados do usuário.

2.    Exclua o script de dados do usuário na caixa de diálogo Editar dados do usuário.

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 do Linux no EC2 está inacessível e com falha em uma ou ambas as verificações de status?

AWS OFICIAL
AWS OFICIALAtualizada há um ano