Remover chave de known_hosts

111

Eu construí várias máquinas virtuais nas últimas semanas. O problema é que o .ssh/known_hosts me dá o aviso Man in the middle . Isso acontece porque outra impressão digital está associada ao IP da máquina virtual.

No arquivo .ssh/known_hosts , no entanto, não encontro o registro relacionado ao IP, apenas duas strings bizarras, semelhantes a teclas, e "ssh-rsa".

Alguém tem alguma idéia sobre como remover a chave antiga de known_hosts ?

    
por Adam Matan 26.08.2009 / 18:00

10 respostas

78
sed -i '6d' ~/.ssh/known_hosts

Modificará o arquivo ~ / .ssh / known_hosts: 6, removendo a sexta linha.

Na minha opinião, usar ssh-keygen -R é uma solução melhor para um usuário de openssh power, enquanto seu administrador regular do Linux faria melhor para manter suas habilidades sed novas usando o método acima.

    
por 02.07.2010 / 19:56
93

A solução mais simples é:

rm -f .ssh/known_hosts

ssh irá recriar o arquivo novamente, mas você perderá a verificação das chaves para outros hosts!

Ou você pode usar:

ssh-keygen -R "hostname"

Ou a mensagem "man-in-the-middle" do ssh deve indicar qual linha do arquivo known_hosts tem a impressão digital ofensiva. Edite o arquivo, pule para essa linha e exclua-o.

    
por 26.08.2009 / 18:11
58

Existe um switch ssh-keygen (-R) para isso.

man ssh-keygen lê:

-R hostname Removes all keys belonging to hostname from a known_hosts file. This option is useful to delete hashed hosts (see the -H option above).

    
por 22.02.2013 / 19:41
16

O aviso informará a linha exata no arquivo de hosts conhecidos.

Veja um exemplo:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Veja a parte /home/user/.ssh/known_hosts:6 ? Especifica o arquivo e o número da linha.

    
por 26.08.2009 / 18:17
9

Você também pode instruir o ssh a não verificar o arquivo known_hosts usando os flags UserKnownHostsFile e StrictHostKeyChecking.

Por exemplo:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

Para facilitar o uso, você pode aliasar isto:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Agora você pode usar o recurso boldssh sempre que tiver certeza de que confia no certificado do servidor.

    
por 12.03.2014 / 17:05
4

Você precisa executar o seguinte comando para se livrar desse problema. Abra o terminal e digite o seguinte comando:

Para todos os exemplos abaixo, basta substituir o valor após -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com
    
por 28.05.2016 / 11:28
2

Você também pode remover uma única linha de hosts conhecidos com, por exemplo, rmknownhost 111 (111 é a linha para remover):

#! /usr/bin/env ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

Salve isso como rmknownhost em uma pasta do seu PATH .

    
por 22.06.2010 / 18:32
0

A entrada para o nome do host ou ip deve estar na primeira coluna. O aviso também deve listar um número de linha onde a chave incorreta está.

    
por 26.08.2009 / 18:13
0

É um arquivo de texto. Você pode facilmente editar com vi (m) e simplesmente excluir a linha em questão (dd), e salve o arquivo (wq). Mas se houver um comando específico para remover um host, esse é provavelmente o método mais seguro.

    
por 27.06.2014 / 15:23
0

Todas as respostas são boas, mas para o SSH pro real faltam informações sobre como remover a assinatura do ssh com o número da porta.

Por exemplo você se conecta a

ssh some.host.name -p 222

e você recebe um aviso, e para remover isso, você precisa usar o número da porta do cólon dos colchetes:

ssh-keygen -R [some.host.name]:222

Espero que isso ajude para usuários de configuração não padrão.

    
por 16.05.2018 / 10:03