O problema
Depois de iniciar uma instância do Ubuntu 14.04 EC2 com volumes HD expandidos, o ssh falha com Connection refused
.
O processo de expansão da EBS
Uma das minhas máquinas Ubuntu 14.04 EC2 estava com pouco tamanho de HD. Para resolver o problema, segui o próprio manual da AWS sobre expansão HD :
- Parou a máquina
- Separei ambos os volumes
- Tirou um instantâneo de ambos os volumes
- Criou volumes maiores a partir do instantâneo
- Anexei os novos volumes e iniciei a máquina
Além disso, aproveitei para adicionar um Elastic IP à máquina, se isso importa.
Depois de iniciar a máquina, recebo constantemente um Connection refused
erro ao enviar ssh para ela. Tentei ssh de dentro da VPC para o IP privado e de fora. Usei o XX.X.XXX.XX
IP e o ec2-XX-X-XXX-XX.compute-1.amazonaws.com
nome DNS, a .pem
chave original que baixei da AWS na criação e a chave ssh que coloquei no arquivo .ssh/authorized_keys
da máquina.
Eu recebo a mesma resposta:
ssh: conectar ao host ec2-XX-X-XXX-XX.compute-1.amazonaws.com porta 22: Conexão recusada
Notas / O que eu tentei
- Eu conectei os volumes a outra instância e os verifiquei. Os arquivos estão lá.
- Eu tentei remover das
PermitRootLogin
linhas de/etc/ssh/sshd_config
. - Tentei me conectar à máquina usando o cliente Java no console do EC2.
- Tentei conectar os volumes originais à máquina (antes da expansão). ainda consigo
Connection refused
. - O volume raiz do EBS está conectado em
/dev/sda1
.
Solução
Atualização : Problema resolvido . Muito obrigado a todos aqui!
apenas colocando este script hacky sujo, usei isso para depurar uma vez (você só precisa do python 2.xx instalado na máquina). Isso é sujo, mas pode ajudar de qualquer maneira!
Anexe e monte seu volume em outra VM e crie um arquivo nela, por exemplo /whatever_mount_path/you_like/cgi-bin/cmd.py ('cgi-bin' é importante), com o conteúdo abaixo:
em seguida, no "/etc/rc.local" do seu volume, adicione essas linhas:
reconecte seu volume à máquina inicial e inicialize-o. A partir de agora, você pode executar comandos do sistema a partir do seu navegador da Web, fornecendo seu cmd como string de consulta GET. por exemplo:
que será codificado pelo seu navegador como:
apenas certifique-se de que a porta 8000 esteja livre e que seu grupo de segurança esteja configurado corretamente
Após uma sessão de suporte por chat com um suporte da AWS, descobrimos o problema.
Eu expandi dois volumes -
/dev/sda1
e/dev/sdf
. Quando conectei os volumes expandidos à máquina, o segundo foi anexado como um dispositivo diferente por algum motivo (/dev/sdg
, Se não me falha a memória). Isso causou alguns problemas de inicialização esshd
nunca apareceu.Quando o torcedor notou a discrepância, recoloquei o volume
/dev/sdf
e tudo funcionou bem.Obrigado a todos pela ajuda - vocês foram ótimos!
Connection refused
geralmente significa que não há nada escutando no IP:Porta relevante. Normalmente, você pode confirmar isso usando o console OOB para fazer login no sistema e executar o netstat, por exemploconfirmaria que algo estava ou não escutando na porta 22.
Como você provavelmente não tem um console OOB, então você está preso em montar os volumes em outra instância e vasculhar os logs e arquivos de configuração.
Verifique se o seu sshd está configurado para escutar na(s) interface(s) e porta corretas. Enquanto estiver lá, aumente o LogLevel para obter mais informações na próxima vez que inicializar.
Vasculhe todos os logs e veja se há alguma mensagem relevante.
Acho que você também pode adicionar um cron job ao sistema simplesmente editando um arquivo relevante e fazendo com que ele execute um comando netstat. Eu não uso o Ubuntu, mas algo como
em /etc/crontab (ou o que quer que o Ubuntu use) obteria um instantâneo do sistema após a inicialização
Embora eu espere que isso dê uma mensagem de erro diferente, certifique-se de que os grupos de segurança do EC2 estejam configurados corretamente.