É possível remover uma chave de host específica do arquivo known_hosts do SSH?

224

É possível remover uma chave de host específica do arquivo known_hosts do SSH?

Normalmente acabo excluindo todo o arquivo known_hosts , que não tenho problemas em fazer, mas apenas por curiosidade, é possível remover apenas uma única entrada?

Eu abri o arquivo known_hosts , mas estou com dificuldades para entender seu conteúdo.

Abaixo está a mensagem que enfrentei, o que me levou a fazer esta pergunta:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
    
por theTuxRacer 10.01.2011 / 06:56

6 respostas

391

Use este comando para remover entradas de known_hosts:

ssh-keygen -R hostname
    
por Takkat 10.01.2011 / 08:43
26

Sim, você pode remover apenas uma chave. Basta abri-lo em um editor e excluir a linha ofensiva. O número após os dois pontos na mensagem de erro é o número da linha, então essa é a linha para excluir - a linha 1 no seu exemplo.

    
por Mike Scott 10.01.2011 / 07:00
15

Eu só recentemente comecei a usar a chave do host, mas quando eu mexi com eles é geralmente uma chave por linha, então faça o backup do arquivo e remova-os um de cada vez até encontrar o caminho certo. Em seguida, adicione os outros de volta. Pouco longe para fazer isso, mas deve funcionar.

Também baseado nesse erro, e sem a menor idéia de como, ele pode ser a primeira chave do host no arquivo que é o problema, então abra o arquivo com o vim

vim ~/.ssh/known_hosts

e clique em

dd

depois salve-o.

    
por percent20 10.01.2011 / 07:01
2

Usando ssh-keygen -R o nome do host nem sempre funcionará. Se você tem uma versão mais nova do SSH que está "ocultando" os nomes de host para evitar o seqüestro de ssh-agent, aparentemente o ssh-keygen não consegue desvendar o nome do host.

Por exemplo, tenho um host chamado build-node-01 e me conectei a ele e aceitei a chave. Eu então reconstruo do zero, obtendo uma nova impressão digital do host e tento reconectar, recebo um aviso de que há um conflito na linha X (digamos 3). Eu corro ssh-keygen -R hostname , mas da próxima vez que eu tento conectar ainda recebo um aviso de que há um conflito. Examinei o arquivo apenas para descobrir que o nome do host estava com hash e aparecia como [1] [email protected]@4D0M57uFF em vez de um nome de host legível.

Nesse caso, a única maneira de remover com êxito o host incorreto era usar

sed -i 'xd' ~/.ssh/known_hosts

Para levar este sed um passo adiante, você pode querer fazer um backup dos known_hosts no caso de você deletar a linha errada, neste caso apenas adicione um .bak (ou qualquer extensão) para a opção -i para criar um backup com essa extensão. Usando ssh-keygen faz isso automaticamente.

sed -i.bak 'xd' ~/.ssh/known_hosts
    
por dragon788 24.03.2015 / 23:24
1

Só para compartilhar outra resposta simples e fácil que acabei de encontrar. Removendo o nome do host é para mim, como o arquivo known_hosts é hash. No entanto, eu PODIA editar manualmente a entrada do host com base no número da linha na mensagem de erro. Como observado anteriormente por Mike Scott, o número da linha do nome do host incorreto está na mensagem de erro.

Ou eu posso fazer isso. A partir daqui: como corrigir chave ofensiva no arquivo ssh known_hosts

Eu tenho essa mágica cli

sed -i 'xd' ~/.ssh/known_hosts

Substitua o x pelo número da linha e voila. Ele também oferece uma resposta perl se o sed não funcionar.

    
por Corvus B 20.02.2014 / 01:37
0
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

Neste caso, 10.20.120.211 é o host que eu quero excluir do meu arquivo known_hosts, tenha certeza de que você escapou dos caracteres especiais como (.)

    
O
por Shan Valleru 20.02.2014 / 02:32

Tags