Eu tenho uma instância de um aplicativo em execução na nuvem em uma instância do Amazon EC2 e preciso me conectar a ela do meu Ubuntu local. Funciona bem em um ubuntu local e também em um laptop. Recebi esta mensagem, Permission denied (publickey).
ao tentar SSH para EC2 de um Ubuntu local diferente .
Estou pensando que pode haver problemas com as configurações de segurança no Amazon EC2, que tem acesso IP limitado a uma instância; ou talvez um certificado precise ser regenerado.
Alguém conhece uma solução para o erro Permissão negada?
A primeira coisa a fazer nessa situação é usar a
-v
opção parassh
, para que você possa ver quais tipos de autenticação são tentados e qual é o resultado. Isso ajuda a esclarecer a situação?Em sua atualização para sua pergunta, você menciona "em outro Ubuntu local". Você copiou a chave privada ssh para a outra máquina?
Como não foi explicitamente mencionado, o sshd é, por padrão, muito rigoroso nas permissões dos
authorized_keys
arquivos. Portanto, seauthorized_keys
for gravável para qualquer pessoa que não seja o usuário ou puder ser gravável por qualquer pessoa que não seja o usuário, ele se recusará a autenticar (a menos que sshd esteja configurado comStrictModes no
)O que quero dizer com "pode ser gravável" é que, se qualquer um dos diretórios pai for gravável para qualquer pessoa que não seja o usuário, os usuários autorizados a modificar esses diretórios podem começar a modificar as permissões de forma que possam modificar/substituir as chaves_autorizadas.
Além disso, se o
/home/username/.ssh
diretório não for de propriedade do usuário e, portanto, o usuário não tiver permissão para ler a chave, você poderá ter problemas:Observe que jane não possui o
.ssh
arquivo. Corrija isso atravésEsses tipos de problemas de permissão do sistema de arquivos não aparecerão com
ssh -v
, e eles nem aparecerão nos logs sshd (!) até que você defina o nível de log como DEBUG./etc/ssh/sshd_config
. Você quer uma linha que leiaLogLevel DEBUG
em algum lugar. Recarregue o servidor SSH usando o mecanismo fornecido pela distribuição. (service sshd reload
no RHEL/CentOS/Scientific.) Um recarregamento normal não irá eliminar as sessões existentes./var/log/auth.log
em distribuições baseadas em Debian;/var/log/secure
em RHEL/CentOS/Scientific.)Muito mais fácil descobrir o que está errado com a saída de depuração, que inclui erros de permissão do sistema de arquivos. Lembre-se de reverter a alteração para
/etc/ssh/sshd_config
quando terminar!Recebi este erro, porque esqueci de adicionar a
-l
opção. Meu nome de usuário local não era o mesmo do sistema remoto.Isso não responde sua pergunta, mas cheguei aqui procurando uma resposta para o meu problema.
Recebi esta mensagem em uma nova instância baseada na AMI do Ubuntu. Eu estava usando a opção -i para fornecer o PEM, mas ainda estava mostrando a "Permissão negada (chave pública)".
Meu problema era que eu não estava usando o usuário correto. Ao executar o ssh com ubuntu@ec2... funcionou normalmente.
Algo que é mais fácil de ler do que
ssh -v
(na minha opinião, claro), étail -f /var/log/auth.log
. Isso deve ser executado no servidor ao qual você está tentando se conectar, enquanto tenta se conectar. Ele mostrará erros em texto simples.Isso me ajudou a resolver meu problema:
Verifique seu arquivo /etc/ssh/sshd_config . Lá, encontre a linha que diz
Essa linha precisa ser modificada para dizer sim em vez de não. Além disso, reinicie o servidor sshd posteriormente.
Talvez não seja relevante para o pôster atual, mas pode ajudar outras pessoas que encontrarem isso ao procurar respostas para situações semelhantes. Em vez de permitir que a Amazon gere o par de chaves ssh, recomendo fazer upload de sua própria chave ssh pública padrão padrão para a Amazon e especificá-la ao executar uma instância do EC2.
Isso permite que você descarte a sintaxe do tipo "-i" no ssh, use rsync com opções padrão e também permite usar a mesma chave ssh em todas as regiões do EC2.
Eu escrevi um artigo sobre esse processo aqui:
Estranhamente, meu problema acabou sendo que o servidor foi reiniciado e foi emitido um novo nome DNS. Eu estava usando o nome DNS antigo. Eu sei que isso parece estúpido, mas demorei um pouco para descobrir isso.
Se você estiver tentando se conectar a um telefone CyanogenMod executando o Dropbear, execute as seguintes linhas para garantir que tudo esteja com as permissões corretas:
ou
e
Isso corrigiu para mim, caso contrário, nada pode se conectar.
Se você estiver usando o CentOS 5, convém definir
StrictModes no
em/etc/ssh/sshd_config
. Estou compartilhando o diretório /home usando NIS/NFS e configurei todas as permissões corretamente, mas sempre me solicitava a senha. Depois que eu configureiStrictModes no
, o problema desapareceu!