É possível remover uma chave de host específica do arquivo known_hosts do SSH?
Normalmente, acabo excluindo o known_hosts
arquivo inteiro , o que não tenho problemas em fazer, mas apenas por curiosidade, é possível remover apenas uma única entrada?
Abri o known_hosts
arquivo, mas estou tentando 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.
Original contents retained as /Users/nha/.ssh/known_hosts.old
supondo que seja o mesmo para o Ubuntu).ssh-keygen -R [ssh.sssshh.com]:1234
Sim, você pode remover apenas uma chave. Basta abri-lo em um editor e excluir a linha incorreta. O número após os dois pontos na mensagem de erro é o número da linha, portanto é a linha a ser excluída - linha 1 no seu exemplo.
fonte
Recentemente, comecei a usar as chaves do host, mas quando as baguncei com elas, geralmente é uma chave por linha. Portanto, faça backup do arquivo e remova-o um de cada vez até encontrar o caminho certo. Em seguida, adicione os outros de volta. Muito pouco, mas deve funcionar.
Também com base nesse erro, e sem ter idéia do que nunca, poderia ser a primeira chave do host no arquivo que é o problema; portanto, abra o arquivo com o vim
vim ~/.ssh/known_hosts
e bateu
dd
então salve.
fonte
O uso do ssh-keygen -R hostname nem sempre funciona. Se você possui uma versão mais recente do SSH que está "ocultando" os nomes de host para impedir o seqüestro de agentes ssh, aparentemente o ssh-keygen não pode unhash o nome do host.
Por exemplo, eu tenho um host chamado build-node-01 e me conectei a ele e aceitei a chave. Depois, reconstruo-o do zero, obtendo uma nova impressão digital do host e tento reconectar, receberei um aviso de que há um conflito na linha X (digamos 3). Eu corro
ssh-keygen -R hostname
, mas na próxima vez que tento conectar, ainda recebo um aviso de que há um conflito. Examinei o arquivo apenas para descobrir que o nome do host estava em hash e apareceu como[1] Bu4Ch@R@4D0M57uFF
um nome de host legível.Nesse caso, a única maneira de remover com êxito o host infrator era usar
Para levar esse sed um passo adiante, convém fazer um backup dos known_hosts caso exclua a linha errada; nesse caso, basta adicionar um .bak (ou qualquer extensão) à opção -i para criar um backup com esse extensão. O uso do ssh-keygen faz isso automaticamente.
fonte
ssh-keygen -R {hostname}
funcionará, mesmo quando os nomes de host estiverem 'ocultos' (hash). Ainda assim, sim, é possível excluir a entrada pelo número (por exemplo, 10ª entrada viased -i.bak 10d ~/.ssh/known_hosts
), mas isso normalmente não é necessário. Pode ser que uma porta não padrão tenha sido usada; nesse caso, talvez você precise formatar o comando como (observe aspas):ssh-keygen -R '[hostname]:2222'
Apenas para compartilhar outra resposta limpa e fácil que acabei de encontrar. A remoção do nome do host está fora de mim, pois o arquivo known_hosts está em hash. No entanto, eu PODE editar manualmente a entrada do host com base no número da linha na mensagem de erro. Conforme 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 a chave incorreta no arquivo ssh known_hosts
Eu tenho esse pouco de magia cli
Substitua x pelo número da linha e pronto. Ele também oferece uma resposta perl se o sed não funcionar.
fonte
Nesse caso, 10.20.120.211 é o host que desejo excluir do meu arquivo known_hosts, certifique-se de escapar dos caracteres especiais como (.)
fonte
ssh-keygen -R ...
(de preferência); ou,sed
com o número da linha específico a ser excluído. Além disso,sed
no local, use-i' option; e.g.,
sed -i.bak 10d ~ / .ssh / known_hosts` para excluir a 10ª linha e (opcionalmente) mantenha o original em um arquivo de backup com o sufixo.bak
.Você pode evitar remover o host específico, atualizando-o:
Dessa forma, você não precisa se conectar novamente ao host.
fonte