Por que recebo "Permissão negada (chave pública)" ao tentar fazer o SSH do Ubuntu local para um servidor Amazon EC2?

218

Eu tenho uma instância de um aplicativo em execução na nuvem na instância do Amazon EC2 e preciso conectá-lo no meu Ubuntu local. Ele funciona bem em um dos locais Ubuntu e também laptop. Recebi a mensagem "Permissão negada (chave pública)" ao tentar acessar o SSH no EC2 em outro Ubuntu local. É tão estranho para mim.

Estou pensando que algum tipo de problema com as configurações de segurança no Amazon EC2, que limitou o acesso de IPs a uma instância ou certificado, pode precisar se regenerar.

Alguém sabe uma solução?

Vorleak Chy
fonte
11
"Costumava trabalhar antes" - antes de quê ?
Womble
Eu tenho uma instância do Elastic Beanstalk EC2. Em agosto de 2013, a solução foi acessar a instância como o usuário ec2-user que causou o erro Permission Denied (publicKey). Viz: ssh -i ./mike-key-pairoregon.pem [email protected]. Claro que você tem que todas as outras coisas como por stackoverflow.com/questions/4742478/...
mikemay
3
Você obtém esse problema se tiver o nome de usuário errado especificado. Os documentos do aws ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ) atualmente fornecem um exemplo com o nome de usuário ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198 -51-100-1.compute-1.amazonaws.com], enquanto minha (antiga) caixa do ubuntu tem um nome de usuário do ubuntu, portanto, quando usei o exemplo, recebi esse erro, mudando para o nome de usuário correto.
David.barkhuizen
@ david.barkhuizen, seu comentário me ajudou. Eu tive um problema parecido; acabou que tinha a ver com o nome de usuário. Obrigado.
NaijaProgrammer

Respostas:

143

A primeira coisa a fazer nessa situação é usar a -vopção ssh, para que você possa ver quais tipos de autenticação são tentados e qual é o resultado. Isso ajuda a esclarecer a situação?

Na atualização da sua pergunta, você menciona "em outro Ubuntu local". Você copiou a chave privada ssh para a outra máquina?

Greg Hewgill
fonte
2
Copiei a chave privada ssh para a outra máquina, como o @Greg sugeriu. Funciona agora. Obrigado!
Vorleak Chy
3
FYI você pode usar o sinalizador -i para apontar para o caminho das chaves sem instalá-los
Jorge Vargas
20
No meu caso, eu estava usando um .ami BitNami e não percebeu que você precisa fazer login como o usuário chamado BitNami, como: ssh -i <keyfile> bitname@<ec2-address>. Infelizmente, a -vopção não me ajudou a encontrar isso, mas ainda é muito útil verificar!
Matt Connolly
7
bem, no meu caso, eu estava usando o nome de usuário errado. estava usando "ubuntu" em vez de "bitnami". assim: ssh -i key.pem BitNami @ HostAddress
Lucas Pottersky
3
A boa liderança é também o nó remoto em si, olhar para /var/log/auth.log, às vezes você vai ver as seguintes mensagens: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keysou qualquer outra coisa
Jonas Libbrecht
76

Como não foi mencionado explicitamente, o sshd é, por padrão, muito rígido quanto às permissões dos authorized_keysarquivos. Portanto, se authorized_keysfor gravável por alguém que não seja o usuário ou puder ser gravado por alguém que não seja o usuário, ele se recusará a se autenticar (a menos que o sshd esteja configurado com StrictModes no)

O que quero dizer com "pode ​​ser tornado gravável" é que, se qualquer um dos diretórios pai for gravável para alguém que não seja o usuário, os usuários com permissão para modificar esses diretórios poderão começar a modificar as permissões de forma que possam modificar / substituir as autorizadas.

Além disso, se o /home/username/.sshdiretório não pertencer ao usuário e, portanto, o usuário não tiver permissões para ler a chave, você poderá encontrar problemas:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Observe que Jane não possui o .ssharquivo. Corrija isso via

chown -R jane:jane /home/jane/.ssh

Esses tipos de problemas de permissão do sistema de arquivos não aparecerão ssh -ve nem aparecerão nos logs sshd (!) Até que você defina o nível de log como DEBUG.

  • Edit /etc/ssh/sshd_config. Você quer uma linha que lê LogLevel DEBUGlá em algum lugar. Recarregue o servidor SSH usando o mecanismo fornecido pela distribuição. ( service sshd reloadno RHEL / CentOS / Scientific.) Uma recarga normal não interrompe as sessões existentes.
  • Tente se autenticar novamente.
  • Descubra onde seus logs do recurso de autenticação vão e os leia. (IIRC, /var/log/auth.lognas distros baseadas no Debian; /var/log/secureno 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_configquando terminar!

Kjetil Joergensen
fonte
5
Que "podem ser feitas gravável" bit é o que me pegou
wmarbut
7
FWIW as permissões corretas para os arquivos principais são 600 (ver aqui )
Matt Lyons
1
Sim, meu arquivo .authorized_keys foi gravável por grupo, por isso se recusou a aceitar.
Aditya MP
2
Eu estava batendo minha cabeça contra a parede! Minha pasta de usuário tinha as permissões erradas. Obrigado!
XJones 12/06
4
O mesmo vale para a própria pasta ~ / .ssh. você pode receber a seguinte mensagem de erro:Authentication refused: bad ownership or modes for directory
Yevgeniy M.
37

Eu recebi esse erro, porque esqueci de adicionar a -lopção. Meu nome de usuário local não era o mesmo que no sistema remoto.

Isso não responde à sua pergunta, mas cheguei aqui procurando uma resposta para o meu problema.

pkmk
fonte
25
ssh host -l useré o mesmo que ssh user@host, certo?
Znarkus
3
@ Znarkus sim, é o mesmo.
Cregox 19/04
Sim, isso resolveu meu problema, causando o erro "Permissão negada (chave pública)" também.
Brooks Moses
1
Este foi o problema para mim. Eu esperava que o usuário "root" funcionasse, mas estava usando uma imagem do Ubuntu EC2 que tinha o usuário padrão "ubuntu".
Cerin
20

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 o ubuntu @ ec2 ... funcionou normalmente.


fonte
Sim ... Eu estava executando o comando sudo, e é por isso que não estava funcionando.
Thaddeusmt
16

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 sem formatação.

Isso me ajudou a resolver meu problema:

Usuário [nome de usuário] de xx.yy.com não permitido, porque nenhum dos grupos de usuários está listado em AllowGroups

Znarkus
fonte
esse é o log do servidor. para RHEL / CentOS 7:tail -f /var/log/secure
Gianfranco P.
10

Verifique seu arquivo / etc / ssh / sshd_config . Lá, encontre a linha que diz

PasswordAuthentication no

Essa linha precisa ser modificada para dizer sim em vez de não. Além disso, reinicie o servidor sshd posteriormente.

sudo /etc/init.d/ssh restart
Sudipta Chatterjee
fonte
18
Isso tornaria o servidor menos seguro.
Znarkus
Esse era o problema que eu tinha: queria configurar uma conta para outro usuário, autenticando apenas com uma senha. Eu também queria poder me conectar de lugares onde não tinha minha chave privada.
Daniel
1
Como podemos ir /etc/ssh/sshd_config- se não conseguimos nem entrar no servidor?
kyo
Para entrar no próprio servidor, você deve usar o arquivo PEM que eles forneceram quando você criou a instância. As instruções vão depois disso.
Sudipta Chatterjee
Isso funcionou para mim, embora a reinicialização do sshd exigisse o seguinte comando:sudo service sshd reload
pacoverflow 19/10/18
6

Talvez não seja relevante para o pôster atual, mas pode ajudar outras pessoas que o encontrarem ao procurar respostas para situações semelhantes. Em vez de permitir que a Amazon gere o par de chaves ssh, recomendo carregar sua própria chave ssh pública padrão e padrão na Amazon e especificar isso quando você executar uma instância do EC2.

Isso permite descartar a sintaxe do tipo "-i" no ssh, usar o rsync com opções padrão e também a mesma chave ssh em todas as regiões do EC2.

Eu escrevi um artigo sobre esse processo aqui:

Carregamento de chaves ssh pessoais no Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys

Eric Hammond
fonte
+1 Procurou esta pergunta exatamente por esse motivo.
John Riselvato
Eu vejo esse erro ao seguir seu artigo. regiões = $ (EC2-descrevem-regiões | cortar -f2) opção Necessário 'K, --private-chave KEY' em falta (-h para uso)
KashifAli
@KashifAli Você deseja configurar as credenciais da ferramenta de linha de comando da API do EC2 para não precisar sempre passar as credenciais em todas as linhas de comando.
Eric Hammond
5

Estranhamente, meu problema acabou sendo o servidor ter sido reiniciado e ter recebido um novo nome DNS. Eu estava usando o nome DNS antigo. Eu sei que isso parece estúpido, mas levei um tempo para descobrir isso.

Patrick Collins
fonte
Obrigado! Este foi exatamente o meu problema. Não percebi que o nome DNS foi alterado quando você reinicia uma instância.
precisa saber é o seguinte
No meu caso, o URL * .compute.amazonaws.com mudou quando atribuí um IP elástico.
Geoffrey Booth
2

Se você estiver tentando se conectar a um telefone CyanogenMod executando o Dropbear, execute as seguintes linhas para garantir que tudo esteja com permissão correta:

chmod 600 /data/dropbear/.ssh/authorized_keys

ou

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

e

chmod 755 /data/dropbear/ /data/dropbear/.ssh

Isso corrigiu para mim, caso contrário, nada pode se conectar.

Naftuli Kay
fonte
"ao tentar acessar o SSH para o EC2 em outro Ubuntu local."
Grammargeek
1
E se eu não tiver chaves_autorizadas ?
IgorGanapolsky
2

Se você estiver usando CentOS 5, você pode querer definir StrictModes nono /etc/ssh/sshd_config. Estou compartilhando o diretório / home usando NIS / NFS e defino todas as permissões corretamente, mas sempre me solicitava a senha. Depois de definir StrictModes no, o problema desapareceu!

uichin
fonte
1

A resposta de Greg explica como solucionar problemas de maneira melhor, mas o problema real é que você tem uma chave ssh definida em um lado da transação (o cliente), que está tentando autenticação de chave pública em vez de autenticação baseada em senha. Como você não possui a chave pública correspondente na instância do EC2, isso não funcionará.

Cian
fonte
2
Como você resolve o problema?
Julien Grenier 15/05
1

Eu tive o mesmo problema e, depois de tentar várias soluções que não funcionaram, abri a porta SSH no firewall do meu roteador (o painel de controle do firewall do roteador está uma bagunça, por isso é difícil dizer o que está acontecendo). De qualquer forma, isso foi corrigido :)

É extremamente irritante que o erro que você recebe seja Permissão Negada, implicando que houve algum tipo de conexão feita, grr.

chichilatte
fonte
1

Eu estava tendo o mesmo problema, embora supostamente estivesse seguindo todas as etapas, incluindo

$ ec2-authorize default -p 22

No entanto, eu havia iniciado minha instância na região us-west-1. Portanto, o comando acima também deve especificar isso.

$ ec2-authorize default -p 22 --region us-west-1

Após esse comando, pude fazer o ssh na instância. Passei um tempo antes de perceber o problema e espero que este post ajude outras pessoas.

Ajit Verma
fonte
0

Este é um caso raro, mas se você tiver o selinux ativado e estiver usando o nfs para o diretório com as keys_computadas (por exemplo, diretórios pessoais compartilhados), será necessário desativar o selinux (não recomendado por razões de segurança, mas você pode temporariamente desabilitá-lo). para ver se isso está causando o problema) ou permita que o selinux use os diretórios pessoais do nfs. Não tenho certeza dos detalhes, mas isso funcionou para mim setsebool -P use_nfs_home_dirs 1

Reese
fonte
0

Acabei de experimentar o mesmo problema depois de adicionar inadvertidamente permissões de gravação de grupo ao diretório inicial dos usuários.

Descobri que essa era a causa executando tail -f /var/log/securena máquina e vendo o erro Authentication refused: bad ownership or modes for directory /home/<username>.

Jacob Tomlinson
fonte