A identificação do host remoto ssh mudou

619

Eu reinstalei meu servidor e estou recebendo estas mensagens:

[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

Eu tentei várias soluções que encontrei na Internet. Meu known_hostsarquivo (normalmente em ~/.ssh/known_hosts) está em /var/lib/sss/pubconf/known_hosts. Eu tentei editá-lo, mas ele permanece em um estado. Instalei o ipa-client e tenho o Fedora 19. Como resolvo este aviso?

Todas as respostas respondidas até agora funcionam apenas se você não tiver o Freeipa instalado.

A resposta certa para freeipa nos comentários abaixo de adrin está aqui .

Filip Dobrovolný
fonte
1
só descobri maneira mais difícil que esse problema também pode acontecer se você tiver conflito de endereço IP nslookup seu ip para depurar este problema mais
sharrajesh
1
Há um impasse aqui. Este é marcado como duplicado para que ninguém possa adicionar resposta e o que ele vincula é marcado como tópico, para que também não seja possível adicionar resposta lá. Se você excluir o known_hosts, ele também corrigirá o problema.
zar
1
Eu tive o mesmo problema. Para o bem de mim e de outros, aqui está a pergunta e a minha resposta: superuser.com/questions/1071204/…
adrin
3
Como alguém que procura verificar sua chave primeiro, achei esta resposta útil. askubuntu.com/a/83499/620623
Declan McKenna
Como o sharrajesh menciona: verifique suas entradas DNS (no FreeIPA para mim) e veja se você não possui várias entradas A com IPs que não são acessíveis pela rede.
Th3penguinwhisperer

Respostas:

1071

Aqui está a solução mais simples

ssh-keygen -R <host>

Por exemplo,

ssh-keygen -R 192.168.3.10

Na ssh-keygenpágina do manual :

  • -R hostnameRemove todas as chaves pertencentes ao nome do host de um arquivo known_hosts. Esta opção é útil para excluir hosts com hash (consulte a opção -H acima).
Kashif Nazar
fonte
Estou no Windows e esta solução, nem a remoção da chave funciona, o que mais posso tentar?
precisa saber é
5
Tudo bem, acontece que no Windows eu preciso usar o terminal do git bash para isso (ou qualquer terminal MingW32). Complicado.
precisa saber é
25
lembre-se de que, se você se conectou através de uma porta específica, pode ser necessário remover com uma sintaxe semelhante ssh-keygen -R [127.0.0.1]:3022. Basta verificar o seu arquivo .ssh / known_hosts pelo que diz explicitamente.
Adam Johns
4
Quando eu tento isso, eu recebo o erro "<hostname> não encontrado em ~ / .ssh / known_hosts"
Nodeocrat 15/17
3
Por que esse aviso ocorre?
Vilas Joshi
199

Usar

ssh-keygen -R [hostname]

O exemplo com um endereço IP / nome de host seria:

ssh-keygen -R 168.9.9.2

Isso atualizará as ofensas do seu host a partir de known_hosts. Você também pode fornecer o caminho do known_hosts com o sinalizador -f.

Ravi Ranjan
fonte
1
Removendo a chave correspondente $ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
9609 DaddyMoe
5
Como é que uma resposta sem explicação obtenha muito upvotes .. sem preocupações de segurança, nenhuma explicação .... -1
Daniel W.
4
Também parece uma cópia da outra resposta abaixo. Por favor, um mod limpar essa bagunça ...
Daniel W.
115

Ocorreu o mesmo erro após recriar uma imagem do Digital Ocean Ubuntu. Eu usei o seguinte comando com o IP do meu servidor no lugar de[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]
Ben
fonte
Muito obrigado! Eu estava usando o nome do host e ele só trabalhou com o IP_ADDRESS :)
J. Lopes
1
Isso foi feito por mim e deve ser a resposta aceita. Não sei por que existem duas cópias dessa resposta que vieram mais tarde e ambas têm mais votos positivos.
Wylliam Judd
O seu não foi o mesmo erro; seu servidor não estava executando o SSSD. Veja o OP.
Mercury00 12/12/19
39

Quando você reinstalar o servidor, sua identidade muda e você começará a receber esta mensagem. O Ssh não tem como saber se você alterou o servidor ao qual ele se conecta ou se um servidor intermediário foi adicionado à sua rede para detectar todas as suas comunicações - portanto, isso chama a sua atenção.

Simplesmente remova a chave de known_hosts excluindo a entrada relevante:

sed '4d' -i /var/lib/sss/pubconf/known_hosts

O 4dé por conta deOffending RSA ...known_hosts:4

mockinterface
fonte
1
Obrigado, mas não sei por que, mas o removo e está novamente. Eu tenho tentativas de parar o serviço sssd e esse efeito desapareceu, mas depois de iniciar o sssd, ele aparece novamente.
Filip Dobrovolný
Faça backup do diretório ~ / .ssh e exclua-o. Seu serviço continua adicionando novamente as chaves depois que ~ / .ssh foi deslumbrado?
2241313 mockoffface
Renomeei o arquivo .ssh para .ssh_old, após uma nova tentativa de conectá-lo, basta criar o diretório vazio .ssh. E ainda não consigo fazer / var / lib / sss / pubconf / known_hosts "editável".
Filip Dobrovolný
4
A maneira mais portátil de fazer isso: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
Pierz
2
Como você faz backup dos servidores identificationno caso em que deseja reconstruir o servidor sem causar interrupções como esta mensagem de erro?
Ninjaxor 21/05
38

A marreta é remover todos os hosts conhecidos de uma só vez:

rm ~/.ssh/known_hosts

Eu me deparo com isso porque usamos pequenas sub-redes de servidores de vida curta em uma caixa de salto e frequentemente temos a reutilização interna de endereços IP de servidores que compartilham a mesma chave ssh.

Andy Hayden
fonte
Trabalhou para mim em uma VM vagante quando a resposta aceita não funcionou.
100pic
1
Ferramenta útil para ter no cinto, mas isso pode te abrir para um ataque do MitM (a coisa exata que known_hostsdeve ser evitada). Faça isso apenas se tiver certeza de que todos os hosts estão seguros.
Freedom_Ben
26

O problema é que você aceitou anteriormente uma conexão SSH com um computador remoto e a impressão digital digital ou a chave de hash SHA256 do computador remoto foi alterada desde a última conexão. Portanto, quando você tenta fazer o SSH novamente ou usa o github para obter código, que também usa o SSH, você recebe um erro. Por quê? Porque você está usando o mesmo endereço de computador remoto como antes, mas o computador remoto está respondendo com uma impressão digital diferente. Portanto, é possível que alguém esteja falsificando o computador ao qual você se conectou anteriormente. Este é um problema de segurança.

Se você tem 100% de certeza de que o computador remoto não está comprometido, hackeado, falsificado, etc, tudo o que você precisa fazer é excluir a entrada do arquivo known_hosts do computador remoto. Isso resolverá o problema, pois não haverá mais incompatibilidade com os IDs de impressão digital SHA256 ao conectar.

No Mac, aqui está o que eu fiz:

1) Encontre a linha de saída que indica RSA host key for servername:port has changed and you have requested strict checking.Você precisará do nome do servidor e da porta potencial dessa saída de log.

2) Faça backup do arquivo de hosts conhecidos SSH cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3) Encontre a linha em que a impressão digital antiga do computador está armazenada e exclua-a. Você pode procurar a impressão digital incorreta do computador remoto usando o nome do servidor e a porta da etapa 1.nano /Users/yourmacusername/.ssh/known_hosts

4) CTRL-X para sair e escolha Y para salvar as alterações

Agora digite ssh -p port servernamee você receberá o prompt original que você fez quando tentou o SSH pela primeira vez nesse computador. Você terá a opção de salvar a impressão digital SHA256 atualizada desse computador remoto em seu arquivo known_hosts. Se você estiver usando SSH pela porta 22, o argumento -p não será necessário.

Quaisquer problemas que você possa restaurar o arquivo known_hosts original: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts

anon58192932
fonte
3
Isso deve ser marcado como resposta aceita. Seguir essas etapas resolveu meu problema enquanto ssh-keygen -R [IP_ADDRESS]não funcionava para mim. Obrigado!
Yusuf Kamil AK
Sim, um daqueles casos que não é justo, a melhor resposta com certeza. A segunda e a terceira respostas apenas repetem o que a primeira disse e todas elas têm uma solução incompleta.
brasofilo 8/04
16

Como muitos já disseram, use ssh-keygen, ou seja,

ssh-keygen -R pong

Além disso, considere desativar temporariamente a verificação de chave do host:

ssh -oStrictHostKeyChecking=no root@pong
Stephen Quan
fonte
o que eu estou usando para o .ssh / config : Host ???? CheckHostIP no StrictHostKeyChecking no(3 linhas, tabuladas a partir do 2º)
XXL
15

Funciona para mim!

Erro: Chave RSA ofensiva em / var / lib / sss / pubconf / known_hosts: 4

Isso indica que você tem uma chave RSA ofensiva na linha no. 4

Solução 1 :

1 vi /var/lib/sss/pubconf/known_hosts

2 remove line no: 4 .

3 Save and Exit, and Retry .

Solução 2:

ssh-keygen -R "you server hostname or ip"

OU

Solução 3:

sed -i '4d' /root/.ssh/known_hosts

Isso removerá a 4thlinha do /root/.ssh/known_hostslocal ( -i).

Sahil Gulati
fonte
1
Isso funciona para o arquivo .ssh known_hosts da raiz. Não é para / var / lib / sss / pubconf / known_hosts, que é um arquivo gerenciado pelo SSSD e preenchido por um servidor remoto.
Mercury00
1
no meu caso, por algum motivo, o problema ocorreu em known_hosts * 2 *. Seguir essas etapas me ajudou a descobrir isso, obrigado @Sahil Gulati!
Lucas
11

Usei a solução de mockinterface, embora o sed -i não funcionasse completamente, resolvi-o excluindo a linha manualmente com o vim:

sudo vim /var/lib/sss/pubconf/known_hosts

Você pode usar qualquer outro editor de texto que desejar, mas provavelmente precisará mostrar seus privilégios administrativos

3nrique0
fonte
1
Sim, excluir o registro do mesmo IP no arquivo known_hosts resolverá o problema.
wherby
A entrada é recriada instantaneamente pelo SSSD ao tentar ssh novamente. observe que o sss pubconf known_hosts é um arquivo gerenciado, não um repositório local preenchido pelo servidor local.
Mercury00
9

Para usuários de Mac, você pode usar o -Rsinalizador do ssh-keygencomando. Exemplo rápido:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESSsendo o IP que você está tentando acessar. E então você pode se conectar bem.

Nick Rameau
fonte
8

Isso ocorre porque as configurações do seu computador remoto foram alteradas. Remova suas chaves atuais para isso.

vim /root/.ssh/known_hosts

Exclua a linha do IP que você está conectando.

miota85
fonte
7

Edite /home/hostname /.ssh/known_hostse exclua as 4 linhas e salve-as.

Em seguida, execute ssh root@pongnovamente, você verá uma mensagem como esta: Are you sure you want to continue connecting (yes/no)? yesapenas imprima yes.

Nota: Se você tiver algum problema, leia as dicas primeiro, isso ajudará.

Bruce
fonte
Melhor resposta que realmente explica o que está acontecendo.
Prometheus
6

As outras respostas aqui são boas e funcionam, de qualquer maneira, resolvi o problema excluindo ~/.ssh/known_hosts. Isso certamente resolve o problema, mas provavelmente não é a melhor abordagem.

tjespe
fonte
6

No meu caso, isso aconteceu porque eu tinha conexão ssh anteriormente com uma máquina com o mesmo ip (por exemplo, 192.152.51.10) e o sistema estava considerando a chave RSA (armazenada em /home/user_name/.ssh/known_hosts) do host anterior que resultou em incompatibilidade.

Para resolver esse problema, você deve remover a chave RSA armazenada anteriormente para o ip 192.152.51.10 .

ssh-keygen -f "/home/user_name/.ssh/known_hosts" -R 192.152.51.10
Prateek Joshi
fonte
5

Solução simples de uma linha, testada no mac:

sed '/212.156.48.110/d' ~/.ssh/known_hosts > ~/.ssh/known_hosts

Exclui apenas o IP do host ssh de destino dos hosts conhecidos.

onde 212.156.48.110 é substituído pelo endereço IP do host de destino.

Causa : ocorreu porque o IP de destino já era conhecido por uma máquina diferente devido ao encaminhamento de porta. A exclusão do IP de destino antes da conexão corrigirá o problema.

Helton Malambane
fonte
4

Use este comando:

truncate -s 0 /home/SYSTEM_NAME/.ssh/known_hosts
Muktesh Kumar
fonte
Por favor, adicione uma explicação sobre o que o comando faz e o que não faz.
Daniel W.
6
Por que você deseja truncar o arquivo? Você perde todas as informações, mesmo as que você já verificou. Esse é um método ruim para agir contra uma única chave de host pública alterada.
Daniel W.
1
este é um truque total: D mas funciona: D
Benjamin
Dica: Isso também exclui todas as outras informações do host. Se você estiver executando scripts automatizados da sua máquina (como implantações), eles poderão ser interrompidos porque você precisará reconfirmar manualmente todas as chaves do host. Apenas para alertar outros usuários aqui que estão ansiosos para usar a solução mais fácil.
Mateng 05/07/19
3

Remova a entrada de known_hosts usando:

ssh-keygen -R *ip_address_or_hostname*

Isso removerá o IP ou nome do host problemático do arquivo known_hosts e tentará se conectar novamente.

Nas páginas do manual:

-R hostname
Remove todas as chaves pertencentes ao nome do host de um arquivo known_hosts. Esta opção é útil para excluir hosts com hash (consulte a opção -H acima).

Chaminda Bandara
fonte
3

Apenas faça:

cd /home/user/.ssh/-> aqui userserá seu nome de usuário, /home/jon/por exemplo.

Então

gedit known_hosts & e exclua o conteúdo dentro dele.

Agora ssh, novamente, deve funcionar.

O predador
fonte
3

Se você estiver tentando conectar-se ao contêiner do docker em execução na porta 2222 com o comando e obter o erro

mian@tdowrick2~$ ssh pos@localhost -p 2222

Em seguida, para resolver esse problema, no seu computador local (por exemplo, máquina host, não contêiner), acesse cd ~/.ssh/e abra o known_hostsarquivo com o editor de texto. Remova a linha que começa com [localhost]:2222e salve o arquivo. Agora tente ssh novamente

mian@tdowrick2~$ ssh pos@localhost -p 2222

O erro desaparecerá, mas você precisará fazer isso sempre que o contêiner reiniciar.

Mian Asbat Ahmad
fonte
2

Minha solução é:

  1. vi ~/.ssh/known_hosts
  2. exclua a linha que contém seu IP conectado desejado.

Isso é melhor do que excluir todos os known_hosts

aeronave
fonte
Esta é a mesma resposta que miota85 abaixo.
Daniel W.
2

Somente problema do lado do cliente (chave duplicada para ip):

Resolver variantes:

Para limpar um ip (porta padrão 22):

ssh-keygen -f -R 7.7.7.7

Para um ip ( porta não padrão ):

ssh-keygen -f -R 7.7.7.7:333

Limpar rapidamente todos os ips:

cd ~; rm .ssh/known_hosts

7.7.7.7 - ssh seu servidor ip connect

333 - porta não padrão

Fortran
fonte
2

Às vezes, se por qualquer motivo, você precisar reinstalar um servidor, ao conectar pelo ssh, descobriremos que o servidor diz que a identificação foi alterada. Se sabemos que não é um ataque , mas que restabelecemos o sistema, podemos remover a identificação antiga dos known_hosts usando ssh-keygen:

ssh-keygen -R <host/ip:hostname>
root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

Ao conectar novamente, solicitaremos que você valide a nova impressão digital:

ssh -l user <host/ip:hostname>
The authenticity of host '<host/ip:hostname>' can't 
be established.
RSA key fingerprint is 3f:3d:a0:bb:59:24:35:6d:e5:a0:1a:3f:9c:86:81:90.
Are you sure you want to continue connecting (yes/no)? yes
BrennQuin
fonte
1

Eu tive esse problema, e o motivo é muito simples, tenho um endereço IP duplicado para o login ssh, portanto, depois de modificar esse problema, tudo será resolvido.

Ventilador
fonte
1

Eu tive o mesmo erro na minha máquina e limpei o known_hostsarquivo e, depois disso, ele funcionou bem.

Indo à minha maneira
fonte
1
Você não deseja excluir o seu authorized_keysquando tiver um problema com o known_hostsarquivo
jeb
0

SOLUÇÃO:

1- exclua de "$ HOME / .ssh / known_hosts" a linha referente ao host na qual é impossível conectar-se.

2- execute este comando: ssh-keygen -R "IP_ADDRESS ou HOSTNAME" (substitua "IP_ADDRESS ou HOSTNAME" pelo seu IP de destino ou nome do host de destino)

3- Tente novamente a conexão ssh (se falhar, verifique a permissão no diretório .ssh, deve ser 700)

Céus escuros
fonte
0

Minha solução em UBUNTU (linux):

1.Você precisa excluir o conteúdo do arquivo "known_hosts", que está em "/home/YOUR_USERNAME/.ssh/known_hosts"

2. Gere uma nova chave ssh como "ssh-keygen -t rsa -C" [email protected] "-b 4096"

3.Copie e cole sua nova chave ssh no seu repositório git (gitlab no meu caso) chaves SSH.

Funciona para mim !

Dionis Oros
fonte
-1

AWS EC2.

Encontre o ip na mensagem que ele fornece.

corre

vim /home/ec2-user/.ssh/known_hosts

Use as setas do teclado para encontrar o ip da mensagem e clique em.

dd

Isso excluirá essa linha e executará escape

:wp

Isso vai economizar, então você está pronto para ir.

user1503606
fonte