Ao tentar fazer o ssh em um computador que controlo, recebo a mensagem familiar:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
[...].
Please contact your system administrator.
Add correct host key in /home/sward/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/sward/.ssh/known_hosts:86
RSA host key for [...] has changed and you have requested strict checking.
Host key verification failed.
Eu realmente mudei a chave. E li algumas dezenas de postagens dizendo que a maneira de resolver esse problema é excluindo a chave antiga do known_hosts
arquivo.
Mas o que eu gostaria é que o ssh aceitasse tanto a chave antiga quanto a nova. O idioma na mensagem de erro (" Add correct host key
") sugere que deve haver alguma maneira de adicionar a chave de host correta sem remover a antiga.
Não consegui descobrir como adicionar a nova chave de host sem remover a antiga.
Isso é possível ou a mensagem de erro é extremamente enganosa?
obtenha a chave rsa do seu servidor, onde
server_ip
está o endereço IP do seu servidor, como192.168.2.1
:Resposta de amostra:
e no cliente, copie toda a linha de resposta
server_ip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwH5EXZG...
e adicione esta chave ao final do seu~/.ssh/known_hosts
arquivo:Remova essa entrada de known_hosts usando:
Isso removerá o IP ou nome de host problemático do arquivo known_hosts e tentará se conectar novamente.
Das páginas man:
Uma maneira muito simples é:
Em seguida, edite known_hosts para limpar a chave original e, em seguida, ssh para o host usando:
Ele adicionará a nova chave automaticamente; em seguida, compare os dois arquivos. Um programa como o meld é uma boa maneira de comparar os dois arquivos. Em seguida, mescle os arquivos para que os known_hosts contenham ambas as chaves
Minha 'razão' para manter duas chaves é que o sistema de destino é multiboot, embora eu ouso dizer que há uma maneira de sincronizar as chaves nas instalações, parece mais simples permitir várias chaves.
EDIÇÃO 2015/06
Devo acrescentar, revisitando-o agora, que noto uma maneira ainda mais simples [desde que a entrada seja identificável, normalmente a partir do nome do host / endereço IP, além da mensagem de erro referenciando sua localização específica];
Existe até a opção HostKeyAlias como em
em seguida, após o cliente ssh adicionar a nova chave sob o alias, você pode editar known_hosts para substituir o nome de host/endereço IP 'real' pelo alias ou conectar-se a essa encarnação desse host com a opção alias sempre
Eu tenho o mesmo problema com um pi de framboesa que inicializo com vários sistemas diferentes (sistema dev para compilar binários de braço, projeto, xbmc, etc.) e me deparei com o mesmo problema. Eles usam DHCP em uma rede local e meu roteador sempre reutilizava o mesmo IP, pois o endereço MAC era o mesmo. Eu resolvi isso usando diferentes nomes de domínio no meu arquivo hosts:
O arquivo known_hosts salva impressões digitais por nome de host, portanto, mesmo que seja o mesmo endereço IP, cada nome de host exclusivo recebe uma entrada diferente.
Fiquei cansado de adicionar os nomes aos arquivos hosts toda vez que usei um novo sistema, então criei uma maneira ainda mais preguiçosa usando zeros à esquerda em endereços IP como:
Cada variação do endereço IP (não canonizado) obtém sua própria entrada em known_hosts.
Se o cliente e o servidor tiverem OpenSSH 6.8 ou mais recente, você poderá usar a
UpdateHostKeys yes
opção no seu arquivossh_config
ou~/.ssh/config
. Por exemplo:Isso faz com que o SSH armazene todas as chaves de host que o servidor precisa
known_hosts
e, quando um servidor altera ou remove uma chave de host, a chave também é alterada ou removida em seu arquivoknown_hosts
.Não vejo por que você deseja trabalhar com duas chaves, mas certamente pode adicionar mais de uma chave válida ao
~/.ssh/known_hosts
arquivo, mas terá que fazer isso manualmente.Outra solução pode ser usar a
StrictHostKeyChecking=no
opção para este host específico:que você poderia colocar em um alias no seu
~/.profile
ou algo semelhante.Se você apenas ssh em uma rede local, então ...
Uma solução simples é limpar o arquivo de chave antigo e substituí-lo por um em branco. Isso permitirá que você reautorize todas as suas conexões com novas chaves. Se você tiver chaves ssh armazenadas para sites fora de sua rede local, precisará garantir que sua conexão inicial seja segura, como fez na primeira vez em que se conectou a esse servidor.
por exemplo
Em seguida, pressione espaço, backspace cntl+x e 'y' para salvar o novo buffer (arquivo). É uma prática ruim, mas tudo bem, desde que você não esteja regularmente ssh's fora de sua rede local (por exemplo, um servidor uni ou de trabalho)
Em uma rede local segura, isso é seguro porque você simplesmente não pode obter um ataque de homem no meio.
É sempre melhor usar o código que você entende!
você precisa remover a chave antiga do servidor cliente
em seguida, gere novamente a chave
verifique se existe uma nova linha
Tantas respostas, mas tantas que desistem da proteção desativando totalmente a verificação rigorosa do host, ou destruindo informações de host não relacionadas ou apenas forçando o usuário a aceitar chaves interativamente, possivelmente em um momento posterior, quando for inesperado.
Aqui está uma técnica simples para permitir que você deixe a verificação estrita do host ativada, mas atualize a chave de maneira controlada, quando você espera que ela seja alterada:
Remova a chave antiga e atualize em um comando
Repita com o(s) endereço(s) IP ou outros nomes de host se você os usar.
A vantagem dessa abordagem é que ela rechavea o servidor exatamente uma vez. A maioria das versões do ssh-keygen parece não retornar um erro se o servidor que você tenta excluir não existir no arquivo hosts conhecido, se isso for um problema para você, use os dois comandos em sequência.
Essa abordagem também verifica a conectividade e emite uma boa mensagem para logs no comando ssh (que efetua login, atualiza a chave do host e gera a chave do host SSH atualizada e sai imediatamente.
Se a sua versão do ssh-keygen retornar um código de saída diferente de zero e você preferir lidar com isso sem erros, independentemente da conexão anterior, basta usar os dois comandos em sequência, ignorando quaisquer erros no comando ssh-keygen.
Se você usar essa técnica, nunca precisará variar seu comando ssh ou desativar a verificação de host, exceto durante esse comando ssh. Você pode ter certeza de que as futuras sessões ssh funcionarão sem conflito ou precisando aceitar explicitamente uma nova chave, desde que o comando ssh acima seja executado sem erros.
Eu tive o mesmo problema.
Tudo o que fiz foi
sudo nano /home/user/.ssh/ host_allow
e apaguei a chave.Quando eu ssh de volta ao servidor, ele adiciona uma nova chave.