O ssh solicita a senha, apesar do ssh-copy-id


28

Estou usando a autenticação de chave pública em um servidor remoto há algum tempo para uso remoto do shell, bem como para montagens sshfs. Depois de forçar uma parte do meu diretório sshfs, notei que o ssh começou a solicitar uma senha. Tentei limpar o .ssh / protected_keys remoto de qualquer menção à máquina local e limpei a máquina local das referências à máquina remota. Repeti então meu ssh-copy-id, ele solicitou uma senha e retornei normalmente. Mas eis que, quando eu ssh no servidor remoto, ainda é solicitada uma senha. Estou um pouco confuso quanto ao que poderia ser o problema, alguma sugestão?


11
serverfault.com/questions/208181/... Eu não tenho certeza do que política Stackexchange em duplicatas em sites é, mas não me parece que cross-postar uma pergunta seria útil.
ephemient

Se tiver verificado que só você pode escrever para ~, ~/.sshe ~/.ssh/authorized_keys, run ssh -vvv server.example.come relatar a saída (anônimos os nomes de host e do usuário se você quiser). Se você tiver acesso root no servidor, observe as entradas de log criadas quando você tenta efetuar um login de chave pública.
Gilles 'SO- stop be evil'

Respostas:


32

O sshd fica estranho com as permissões em $ HOME, $ HOME / .ssh (ambos os diretórios) e em $ HOME / .ssh / allowed_keys.

Uma das minhas caixas Linux terminou com permissões drwxrwxrwx no meu diretório $ HOME. Uma caixa do Arch linux absolutamente não efetuaria login usando chaves públicas até eu remover a permissão 'w' para o grupo, outra no meu diretório $ HOME.

Tente fazer com que $ HOME e $ HOME / .ssh / tenham permissões mais restritivas para grupos e outros. Veja se isso não deixa o sshd fazer suas coisas.


4
Sim. ssh-copy-iddeveria ter tomado conta das permissões de ~/.sshe ~/.ssh/authorized_keys, mas também certifique-se de que seu próprio diretório inicial não seja gravável em grupo.
Gilles 'SO- stop be evil'

7
Era isso para mim. Usei o ssh-copy-id para enviar uma chave RSA e ainda estava sendo solicitado. A execução chmod g-w homedirno servidor remoto funcionou como um encanto.
Ben Kreeger

9

As seguintes permissões são necessárias:

  • A .sshpasta:700 (drwx------)
  • A chave pública: 644 (-rw-r--r--)
  • A chave privada: 600 (-rw-------)

5

Recentemente, também tive esse problema.

Foi corrigido modificando as permissões do $HOMEdiretório. No entanto, a simples execução chmod g-w ~/não corrigiu o problema. Além de chmod g-w ~/eu também precisar modificar as permissões othersno $HOMEdiretório executandochmod o-wx ~/

Juntos:

chmod g-w ~/
chmod o-wx ~/

Observe que não tenho certeza se o-xfoi necessário; simplesmente executei como precaução.



0

O problema ocorre também em logons paralelos, ou seja, se você tentar montar o sshfs durante uma sessão ssh aberta? Caso contrário, acho que você tem seu diretório pessoal criptografado? Nesse caso$HOME/.ssh/authorized_keys , só se tornaria utilizável na máquina remota após o seu primeiro login (usando sua senha).

Confira https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Trou Troubleshooting para obter uma explicação e a solução necessária.


0

Eu postaria isso como um comentário, mas provavelmente seria muito longo. Eu só queria acrescentar que ssh-copy-idtenta enviar a chave pública do /.sshlocal dentro do seu$HOME pasta.

Se você está tentando fazer ssho root com uma chave pública (salve os comentários relacionados à segurança), ssh-copy-idpode estar tentando fazer login com a chave pública errada se a sua $HOMEvariável estiver definida como algo diferente de /root(como estar definido no diretório inicial do usuário normal) ), portanto, o usuário root seria solicitado porque a chave pública do root não está instalada no sistema remoto.

Você pode usar a seguinte linha única para especificar a chave pública exata:

pub="$(cat /root/.ssh/id_rsa.pub)"; ssh user@remotehost "echo $pub >> .ssh/authorized_keys; chmod 700 .ssh; chmod 600 .ssh/authorized_keys"

Eu encontrei esse cenário na natureza algumas vezes (inclusive esta manhã) e imaginei que tentaria colocar meus 2 centavos, apenas no caso de alguém se encontrar na mesma situação.


0

Como outros colaboradores mencionados, este é provavelmente um problema de permissão.

A melhor maneira de diagnosticar isso é reiniciar o daemon SSH no servidor remoto com a opção de depuração ativada - geralmente a opção "-d". A mensagem do daemon OpenSSH é muito explícita. Por exemplo, você verá mensagens como:

Authentication refused: bad ownership or modes for directory /some/path

Eu não chamaria essa mensagem de "muito explícita". Indica muito vagamente o que você deve procurar (propriedades e permissões incorretas), mas não informa qual diretório ou arquivo verificar, nem quais devem ser as configurações corretas.
Urhixidur 27/09/17

0

O motivo pelo qual a chave pública não estava sobrevivendo após a reinicialização foi o fato de o diretório inicial do meu servidor estar criptografado. (você faz isso enquanto instala o servidor)


0

Outro possível problema é que o servidor não suporta o seu algoritmo de chave. No meu caso, encontrei as seguintes mensagens nos meus sshdlogs ( /var/log/auth.logno meu caso):

userauth_pubkey: unsupported public key algorithm: ssh-ed25519 [preauth]

Se for esse o caso, você precisa habilitar o suporte para esse algoritmo em sua sshdconfiguração (o que pode exigir uma atualização para uma sshdversão mais recente ) ou precisa alternar sua chave para um algoritmo suportado pelo qual sshdvocê está tentando se conectar. .


0

Como essa pergunta aparece entre os primeiros resultados da pesquisa ao pesquisar esse comportamento, também adicionarei minha solução:

No meu caso, não havia nada relacionado às permissões. Por qualquer motivo (não me incomodei em descobrir por qual motivo, como encontrei uma solução rápida) ao executar o comando ssh, o programa não procurou o arquivo de identidade correto. Uma solução foi adicionar manualmente no servidor remoto uma chave SSH que o programa SSH tentou usar. Você pode observar o que o programa SSH faz ao executar o comando adicionando -v ao comando:

ssh -v username@your-host-ip-or-domain 

Depois, basta pegar na máquina local qualquer chave pública para a qual o programa SSH tente encontrar um arquivo de identidade / chave privada, em um Mac, por exemplo:

cat ~/.ssh/id_rsa.pub

... e adicione-o ao arquivo allowed_keys do controle remoto em:

~/.ssh/authorized_keys

Outra, no meu caso, a melhor solução foi adicionar um host personalizado no meu arquivo de configuração ssh local. No meu Mac é:

/Users/my-user-name/.ssh/config

Aqui você pode adicionar, por exemplo, algo como isto:

Host mynewserver
        HostName some.IP.number.or.domain
        Port 20000 #if custom port is used and not the default 22
        User the_root
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_for_my_new_server

Então você só precisa executar:

ssh mynewserver

... e Voilà

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.