De um dia para o outro, o servidor de nossa empresa começou a me pedir minha senha SSH.
A primeira coisa que verifiquei foi se minha chave estava dentro de .ssh/authorized_keys
no servidor. Minha chave estava lá dentro, nada mudou. Além disso, em /etc/ssh/sshd_config
nada mudou.
Então tentei fazer este procedimento recentemente servidor Ubuntu16 instalado. Depois de concluir essas 5 etapas, o novo servidor me pediu novamente a senha SSH.
O comando ssh-copy-id
finalmente realizou o login SSH sem chave, mas percebi que .ssh/authorized_keys
tem três linhas: uma começando com ssh-dss
e 2x começando com ssh-rsa
Agora me lembro que o procedimento de 5 etapas do link acima funcionou no passado com apenas uma chave.
Algo mudou recentemente? Por que o procedimento acima não funciona mais?
Editar: uma vez que ssh-copy-id
copia 3 chaves no total para .ssh/authorized_keys
essas chaves pode ser encontrado nos seguintes arquivos:
~/.ssh/id_dsa
~/.ssh/sshkey.pub
~/.ssh/id_rsa.pub
então eu apaguei linha por linha do remoto “s .ssh/authorized_keys
arquivo
excluída ~/.ssh/id_dsa
linha – login automático bem-sucedido
excluída ~/.ssh/id_rsa.pub
linha – login automático bem-sucedido
linha excluída ~/.ssh/sshkey.pub
– login automático não bem-sucedida – solicitação de senha
Apenas o conteúdo de ~/.ssh/sshkey.pub
é necessário. Por que o SSH está comparando sshkey.pub
e não id_rsa.pub
como no exemplo do tutorial online?
Comentários
Resposta
Parece que ssh-copy-id
é apenas uma função de conveniência. Ele verifica se as chaves já foram exportadas para a máquina, cria o diretório .ssh
se necessário, mas basicamente adiciona chaves públicas a .ssh/authorized_keys
. ssh-copy-id
é um script de shell (em openssh), então você pode ler seu código (vi `which ssh-copy-id`
) no final:
[ "$DRY_RUN" ] || printf "%s\n" "$NEW_IDS" | \ ssh "$@" "exec sh -c "cd ; umask 077 ; mkdir -p .ssh && { [ -z ""`tail -1c .ssh/authorized_keys 2>/dev/null`"" ] || echo >> .ssh/authorized_keys ; } && cat >> .ssh/authorized_keys || exit 1 ; if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi"" \ || exit 1
Durante a autenticação, apenas authorized_keys
são verificados. Da documentação do openssh:
O arquivo ~ / .ssh / authorized_keys lista o público chaves que são permitidas para login. Quando o usuário faz login, o programa ssh diz ao servidor qual par de chaves ele gostaria de usar para autenticação. O cliente prova que tem acesso à chave privada e o servidor verifica se a chave pública correspondente está autorizada a aceitar a conta.
Espero que esta resposta o título da sua pergunta “ssh-copy-id versus cópia manual id_rsa.pub”. Este arquivo ~/.ssh/sshkey.pub
eu não tenho, então espero que você tenha resolvido os problemas com sua configuração. De qualquer forma, sim, você pode apenas copiar manualmente a chave pública para authorized_keys
não usando ssh-copy-id
.
ssh -v your-remote-server
à sua pergunta.