Estou trabalhando a partir do URL que encontrei aqui:
Meu cliente ssh é o Ubuntu 64 bits 11.10 e meu servidor é o Centos 6.2 de 64 bits. Eu segui as instruções. Ainda recebo uma solicitação de senha no ssh.
Não tenho certeza do que fazer a seguir.
ssh
key-authentication
Thom
fonte
fonte
chmod 700
/var/log/auth.log
dirá por que o login está falhando./var/log/secure
.0700
foi a resposta, mas quando o fizssh -v
no lado do cliente não indicou um erro relacionado ao motivo pelo qual a chave não foi aceita, apenas disse que estava tentando a senha a seguir, mesmo que meu cliente tenha enviado uma chave pública. Como eles esperam que diagnosticemos problemas sem informações de erro do servidor?Respostas:
Verifique se as permissões no
~/.ssh
diretório e seu conteúdo estão corretas. Quando configurei minha autenticação de chave ssh pela primeira vez, eu não tinha a~/.ssh
pasta configurada corretamente e ela gritou comigo.~
, seu~/.ssh
diretório e o~/.ssh/authorized_keys
arquivo na máquina remota devem ser graváveis somente por você:rwx------
erwxr-xr-x
são bons, masrwxrwx---
não são bons¹, mesmo se você for o único usuário do seu grupo (se você preferir modos numéricos:700
ou755
não775
) .Se
~/.ssh
ouauthorized_keys
for um link simbólico, o caminho canônico (com links simbólicos expandidos) é verificado .~/.ssh/authorized_keys
arquivo (na máquina remota) deve ser legível (pelo menos 400), mas você também precisará ser gravável (600) se adicionar mais chaves a ele.rw-------
ie600
.restorecon -R -v ~/.ssh
(veja, por exemplo, o bug do Ubuntu 965663 e o relatório de bug do Debian # 658675 ; isso está corrigido no CentOS 6 ).Cept Exceto em algumas distribuições (Debian e derivadas) que corrigiram o código para permitir gravabilidade em grupo, se você for o único usuário em seu grupo.
fonte
/home/USER
deve ser700
ou755
ssh -v user@host
.chmod -R 700 ~/.ssh
trabalhou para mim para atender às restrições de esta resposta (RHEL 7)Se você tiver acesso root ao servidor, a maneira mais fácil de resolver esses problemas é executar o sshd no modo de depuração, emitindo algo como
/usr/sbin/sshd -d -p 2222
no servidor (o caminho completo para o executável do sshd é necessário,which sshd
pode ajudar) e, em seguida, conectar-se a partir do clientessh -p 2222 user@host
. Isso forçará o daemon SSH a permanecer em primeiro plano e exibir informações de depuração sobre cada conexão. Procure algo comoSe não for possível usar uma porta alternativa, você pode parar temporariamente o daemon SSH e substituí-lo por um no modo de depuração. A interrupção do daemon SSH não mata as conexões existentes, portanto, é possível fazer isso por meio de um terminal remoto, mas é um pouco arriscado - se a conexão for interrompida de alguma forma no momento em que a substituição da depuração não estiver em execução, você estará bloqueado na máquina até que você possa reiniciá-lo. Os comandos necessários:
(Dependendo da sua distribuição Linux, a primeira / última linha pode ser
systemctl stop sshd.service
/ emsystemctl start sshd.service
vez disso.)fonte
sshd -d
, mas falha quando eu realmente corroservice sshd start
. Tenho certeza de que é simples, mas não sou um guru do Linux. Alguma ideia?Seu diretório pessoal é criptografado? Nesse caso, para sua primeira sessão ssh, você precisará fornecer uma senha. A segunda sessão ssh no mesmo servidor está trabalhando com a chave de autenticação. Se for esse o caso, você pode mover seu
authorized_keys
diretório para um diretório não criptografado e alterar o caminho~/.ssh/config
.O que acabei fazendo foi criar uma
/etc/ssh/username
pasta, pertencente ao nome de usuário, com as permissões corretas, e colocar oauthorized_keys
arquivo lá. Em seguida, alterou a diretiva AuthorizedKeysFile/etc/ssh/config
para:Isso permite que vários usuários tenham esse acesso ssh sem comprometer as permissões.
fonte
Depois de copiar as chaves para a máquina remota e colocá-las dentro da
authorized_keys
impressora, você deve fazer algo assim:fonte
ssh-add -L
Apenas tente estes comandos a seguir
ssh-keygen
Pressione a tecla Enter até receber o prompt
ssh-copy-id -i root@ip_address
(Uma vez solicitará a senha do sistema host)
ssh root@ip_address
Agora você deve conseguir fazer login sem nenhuma senha
fonte
Enfrentei desafios quando o diretório inicial no controle remoto não possui privilégios corretos. No meu caso, o usuário alterou o diretório inicial para 777 para obter algum acesso local na equipe. A máquina não pôde mais se conectar com as teclas ssh. Mudei a permissão para 744 e ela começou a funcionar novamente.
fonte
O SELinux no RedHat / CentOS 6 tem um problema com a autenticação pubkey , provavelmente quando alguns dos arquivos são criados, o selinux não está configurando suas ACLs corretamente.
Para corrigir manualmente as ACLs do SElinux para o usuário root:
fonte
ssh root@mymachine
entrar no CentOS6mymachine
sem problemas, mas tenho um usuário com privilégios mais baixos que preferiria usar, masssh regularUser@mymachine
ainda solicita uma senha. pensamentos?Encontramos o mesmo problema e seguimos as etapas da resposta. Mas ainda não funcionou para nós. Nosso problema era que o login funcionava de um cliente, mas não de outro (o diretório .ssh foi montado pelo NFS e os dois clientes estavam usando as mesmas chaves).
Então tivemos que dar um passo adiante. Ao executar o comando ssh no modo detalhado, você obtém muitas informações.
O que descobrimos foi que a chave padrão (id_rsa) não foi aceita e, em vez disso, o cliente ssh ofereceu uma chave correspondente ao nome do host do cliente:
Obviamente, isso não funcionará em nenhum outro cliente.
Portanto, a solução em nosso caso foi alternar a chave rsa padrão para a que continha usuário @ myclient. Quando uma chave é o padrão, não há verificação do nome do cliente.
Depois, encontramos outro problema, após a troca. Aparentemente, as chaves estão armazenadas em cache no agente ssh local e recebemos o seguinte erro no log de depuração:
Isso foi resolvido recarregando as chaves no agente ssh:
fonte
Seria a falta de configuração do SSH no final do servidor. O arquivo sshd_config do servidor deve ser editado. Localizado em
/etc/ssh/sshd_config
. Nesse arquivo, altere variáveis'yes' a 'no' para ChallengeResponseAuthentication, PasswordAuthentication, UsePAM
'no' a 'yes' para PubkeyAuthentication
Com base em http://kaotickreation.com/2008/05/21/disable-ssh-password-authentication-for-added-security/
fonte
vi /etc/ssh/sshd_config
, adicione xxx usuário a lista AllowUsers,service sshd restart
*** CUIDADO reiniciar o serviço sshd com mau sshd_config pode trancá-lo fora de uma caixa !? *** Isso funcionou.Certifique-se de que
AuthorizedKeysFile
aponta para o local correto, use%u
como um espaço reservado para o nome de usuário:Pode ser que você só precise descomentar a linha:
AuthorizedKeysFile .ssh / allowed_keys
Lembre-se de que você deve recarregar o serviço ssh para que as mudanças ocorram:
fonte
Dois comentários: isso substituirá o arquivo original. Eu apenas copio a chave pública gerada e faço algo como:
Isso anexará a chave que você deseja usar à lista de chaves pré-existente. Além disso, alguns sistemas usam o arquivo
authorized_keys2
, por isso é uma boa ideia criar um link rígido apontando entreauthorized_keys
eauthorized_keys2
, apenas por precaução.fonte
Minha solução foi que a conta estava bloqueada. Mensagem encontrada em / var / log / secure: Usuário não permitido porque a conta está bloqueada Solução: forneça ao usuário uma nova senha.
fonte
/etc/shadow
para este usuário de!
para*
. Depois dessa senha, a autenticação ainda é impossível, mas o usuário não está mais bloqueado.Encontrei um problema semelhante e segui as etapas usando o modo de depuração.
Isso mostrou o seguinte resultado
Foi realmente confuso
Ele mostrou que o diretório raiz tinha permissões para cada um. Nós o alteramos para que outros não tivessem permissões.
A autenticação de chave começou a funcionar.
fonte
rsync -av ./root/ root@THE_HOST:/root
para fazer upload de alguns arquivos do meu diretório de trabalho local; então, esse problema ocorre (de fato, no começo eu não percebi. Depois que os trabalhos do cron em outros hosts falham na manhã seguinte, comecei a descobrir o motivo) . Orsync -av ./root/ root@THE_HOST:/root
comando alterou o proprietário e a permissão do/root
diretório do host remoto. Corrigida a permissão, problema resolvido.Failed publickey for root from 135.250.24.32 port 54553 ssh2
Recebo a mesma mensagem e problema quando esqueci de adicionar o pubkey a um hostauthorized_keys
. Adicionando esse comentário, como no meu caso, geralmente percebo meu erro depois de verificar a depuração e todas as permissões, além dos arquivos de configuração #: o <No arquivo / etc / selinux / config, altere o SELINUX para desativado de impor que o ssh sem senha funcione com êxito.
No início, sou capaz de fazê-lo de uma maneira. Agora, pelas duas maneiras, sou capaz de fazer ssh sem senha.
fonte
Uma coisa que eu errei foi a propriedade do meu diretório pessoal no sistema do servidor. O sistema do servidor foi definido como padrão: padrão, então eu:
E funcionou. Outra solução barata é desativar o StrictModes: StirctModes no. no sshd_config. Isso indica pelo menos se os protocolos de troca e conexão de chaves são bons. Então você pode caçar as permissões ruins.
fonte
Para mim, a solução era oposta à de Wojtek Rzepala : eu não percebi que ainda estava usando
authorized_keys2
, o que foi preterido . Minha configuração do ssh parou de funcionar em algum momento, presumivelmente quando o servidor foi atualizado. Renomear.ssh/authorized_keys2
como.ssh/authorized_keys
corrigido o problema.D'oh!
fonte
No passado, me deparei com alguns tutoriais que descrevem como obter uma configuração sem senha ssh, mas alguns estão tristemente errados.
Vamos começar de novo e verificar todas as etapas:
ssh-keygen -t rsa
pública e privada (
id_rsa.pub
eid_rsa
) serão automaticamente armazenadas no~/.ssh/
diretório.A configuração será mais fácil se você usar uma senha vazia. Se você não estiver disposto a fazer isso, siga este guia, mas verifique também o item abaixo.
ssh-copy-id user@server
a chave pública do cliente será copiada para o local do servidor
~/.ssh/authorized_keys
.ssh user@server
Agora, se ainda não estiver funcionando após as 3 etapas descritas, tente o seguinte:
~/ssh
permissões de pasta na máquina cliente e servidor ./etc/ssh/sshd_config
in no servidor para garantir queRSAAuthentication
,PubkeyAuthentication
e asUsePAM
opções não estejam desativadas, elas possam ser ativadas por padrão comyes
.ssh-agent
&ssh-add
para obter conexões sem senha na sua sessão./var/log/auth.log
no servidor para descobrir o problema do motivo pelo qual a autenticação de chave é ignorada.fonte
Eu estava tendo exatamente o mesmo problema com o PuTTY ao conectar-se a uma máquina Ubuntu 16.04. Foi intrigante porque o programa pscp do PuTTY estava funcionando bem com a mesma chave (e a mesma chave funcionou no PuTTY para conectar-se a outro host).
Graças ao comentário valioso de @UtahJarhead, verifiquei meu arquivo /var/log/auth.log e encontrei o seguinte:
Acontece que as versões mais recentes do OpenSSH não aceitam chaves DSA por padrão. Depois que mudei de um DSA para uma chave RSA, funcionou bem.
Outra abordagem: esta pergunta discute como configurar o servidor SSH para aceitar chaves DSA: https://superuser.com/questions/1016989/ssh-dsa-keys-no-longer-work-for-password-less-authentication?lq = 1
fonte
Estes passos devem ajudá-lo. Eu uso isso regularmente entre muitas máquinas Ubuntu 10.04 de 64 bits.
você pode colocar isso em um script com alguns prompts e invocá-lo como
fonte
ssh-copy-id
que executa as duas últimas etapas automaticamente.mkdir
que você deve adicionar láchmod 700 .ssh
também e btw você não precisa ser tão detalhado com~/.ssh
, apenas.ssh
é suficiente já que os comandos são executados no diretório casa de qualquer maneiraEu tive um problema semelhante com o ssh. No meu caso, o problema era que eu instalei o hadoop cloudera (do rpm no centos 6) e ele criou hdfs do usuário com o diretório home
/var/lib/hadoop-hdfs
(não padrão/home/hdfs
).Alterei / etc / passwd
/var/lib/hadoop-hdfs
para/home/hdfs
, mudei o diretório home para um novo local e agora posso conectar-me com a autenticação de chave pública.fonte
Eu só tinha este mesmo problema, e para mim a solução foi ajustado
UsePAM
parano
. Veja, mesmo comPasswordAuthentication
definido comono
, você ainda receberákeyboard-interactive
, e no meu caso, meu programa ssh local continuava por padrão, por algum motivo.Contexto extra para ajudar qualquer pessoa com a mesma situação: estou conectando de um host executando o Dropbear a outro executando o OpenSSH. Com
PasswordAuthentication
eUsePAM
ambos configuradosno
na máquina remota, receberei a seguinte mensagem se digitarssh user@server
:Fornecendo o arquivo de identidade
-i
, tudo funciona como esperado.Pode haver um pouco mais de informação aqui.
fonte
Depois de verificar as permissões e tentar várias outras soluções listadas aqui, finalmente removi o diretório ssh do servidor, a instalação da minha chave pública novamente.
Comandos do servidor:
Comandos locais:
fonte
No servidor:
Foi
directory permission issue
. Era 777 no servidor, entãoI changed it back to 700
. Este é ofixed
meu problemassh password less login failure
mesmo depois de copiar$USER/.ssh/id_rsa.pub
para o servidor$USER/.ssh/authorized_keys
.fonte
Outra opção é uma variante do 's @Jagadish resposta : para
strace
o daemon ssh.Tem a vantagem significativa de não precisarmos parar o sshd, o que pode resultar em um bloqueio completo se algo der errado.
Primeiro, encontramos o pid do processo principal do sshd. Aqui podemos ver executando um
pstree -pa|less
.Depois de saber que o pid é 633, podemos
strace
, seguindo seus filhos:O resultado será que tudo o que esse sshd e seus processos filhos fizeram será rastreado no arquivo nomeado
sux
no diretório local.Em seguida, reproduza o problema.
Ele terá uma lista enorme de registros de chamadas do kernel, o que é incompreensível / irrelevante para nós, mas não em todos os lugares. No meu caso, o importante era isso:
Isso significava que o sshd tentou registrar a mensagem User cica não permitida porque a conta está bloqueada - apenas não pôde, porque o log não é suficiente para isso. Mas já sabemos, a pubkey foi rejeitada porque a conta estava bloqueada.
Ainda não é uma solução - agora precisamos pesquisar no Google, o que significa uma "conta bloqueada" no caso do sshd. Provavelmente será um truque trivial
/etc/passwd
,/etc/shadow
mas o importante é feito - o problema não é misterioso, mas facilmente debugável / googlável.fonte
No meu caso, eu tinha todas as permissões corretas e, mesmo ao executar o ssh com o sinalizador -vvv, não conseguia descobrir qual era o problema.
Então eu gerei novo certificado no host remoto
e copiou chaves geradas para a máquina local e adicionou nova chave pública a ~ / .ssh / allowed_keys no host remoto
O uso de chaves geradas da conexão da máquina host remota agora funciona. Portanto, se outras soluções falharem, outra coisa é tentar.
fonte
Meu cenário era que eu tinha um servidor NAS no qual criei um
backupbot
usuário, após a criação da minha conta principal, que foi capaz de efetuar login para criar obackupbot
usuário inicialmente . Após mexersudo vim /etc/ssh/sshd_config
e criar obackupbot
usuário, évim
possível criar, pelo menos no Ubuntu 16.04, e com base na sua~/.vimrc
configuração, um arquivo de troca deixado pela edição de sua sessão do vim/etc/ssh/sshd_config
.Verifique se:
/etc/ssh/.sshd_config.swp
existe e se o remove e reinicie osshd
daemon:Isso resolveu magicamente o meu problema. Eu já havia verificado todas as minhas permissões e até as impressões digitais RSA das chaves pública e privada. Isso é estranho e provavelmente um bug
sshd
, especificamente nesta versão:fonte