Eu tenho um servidor (vamos supor que seu ip seja abcd) que permite aos usuários fazer login via ssh. Agora quero mudar a máquina física mantendo o ip igual. Para que a nova máquina ainda seja acessada por um usuário como este
$sshabcd
O problema é que toda vez que um usuário tenta fazer login, ele recebe o seguinte erro de incompatibilidade de chave ssh.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @ AVISO: A IDENTIFICAÇÃO DO HOST REMOTO MUDOU! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ É POSSÍVEL QUE ALGUÉM ESTEJA FAZENDO ALGO DESAGRADÁVEL! Alguém pode estar espionando você agora mesmo (ataque man-in-the-middle)! Também é possível que a chave do host RSA tenha acabado de ser alterada. A impressão digital da chave RSA enviada pelo host remoto é 02:dc:c6:18:1b:34:b7:1d:fa:90:ab:e1:95:48:69:84. Entre em contato com o administrador do sistema. Adicione a chave de host correta em /home/user/.ssh/known_hosts para se livrar desta mensagem. Chave ofensiva em /home/user/.ssh/known_hosts:37 A chave de host RSA para ex-alunos foi alterada e você solicitou uma verificação rigorosa. A verificação da chave do host falhou.
Eu sei que o usuário pode excluir a linha # 37 do arquivo ~/.ssh/known_hosts e da próxima vez ela receberá um prompt sim/não. O que eu quero é que o usuário não fique ciente de toda essa coisa de substituição da máquina e apenas receba uma solicitação de senha.
Como fazer isso?
Responder1
ComoEthabellmencionado, você pode copiar as chaves do host atuais para o novo servidor.
Você pode encontrar suas chaves de host abrindo seu sshd_config
arquivo (na minha caixa do Ubuntu 12.04 é /etc/ssh/sshd_config
). No arquivo de configuração procure as HostKey
entradas. Essas entradas informarão onde os arquivos de chave do host estão localizados. Você poderá copiar esses arquivos para o novo servidor e atualizar os do novo servidor sshd_config
para apontar para as chaves copiadas (ou apenas substituir os arquivos que já existem no novo servidor).
Além disso, observe esta seção da sshd_config
página de manual, especificamente a parte sobre permissões:
Especifica um arquivo que contém uma chave de host privada usada pelo SSH. O padrão é
/etc/ssh/ssh_host_key
para a versão 1 do protocolo,/etc/ssh/ssh_host_dsa_key
e/etc/ssh/ssh_host_ecdsa_key
para/etc/ssh/ssh_host_rsa_key
a versão 2 do protocolo. Observe que o sshd(8) se recusará a usar um arquivo se ele for acessível por grupo/mundo. É possível ter vários arquivos de chave de host. As chaves “rsa1” são usadas para a versão 1 e “dsa”, “ecdsa” ou “rsa” são usadas para a versão 2 do protocolo SSH.
Responder2
Se você tivesse a chave do host original, poderia restaurá-la e isso interromperia o erro.
Ou você pode desativar StrictHostKeyChecking em seu arquivo de configuração sshd.
... Fazer isso, entretanto, é uma ideia horrível, horrível.
Se houver uma maneira de executar apenas ssh-keygen -R server.example.com
em máquinas clientes, essa seria a melhor maneira - porque desativar a verificação da chave do host é como dizer: "Ei. Ataque-me". Eu fico querendo obscuridade quando as coisas mudam, mas a segurança deve ser a prioridade número 1 em relação às mudanças obscuras.
Responder3
Você pode tentar assim
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'
Observe que se a pasta .ssh ainda não existir, o comando acima falhará. Além disso, pode ser melhor, ao criar o arquivo, definir uma permissão mínima possível (basicamente leitura e gravação apenas para o proprietário). Aqui está um comando mais avançado:
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Para obter mais informações sobre esse problema, você deve acessar este site:Erro de alteração de chave de host SSH