Existe uma maneira fácil de atualizar informações em known_hosts quando você souber que uma chave de host foi alterada?

38

Se o sistema operacional de um host tiver sido reinstalado e sua chave pública regenerada for sshing, certamente falhará porque a nova chave não corresponde à antiga.

Existe uma maneira mais fácil de informar ao ssh que você sabe que a chave do host foi alterada e que você deseja que ela seja atualizada. Eu acho que parece um pouco propenso a erros usar um editor de texto ou algo parecido com sed para remover a linha incorreta.

Sam
fonte
Isso duplica uma pergunta no superusuário . Veja as informações mais detalhadas lá.
Yitz

Respostas:

59

Use ssh-keygen -R hostnamepara remover o nome do host do seu arquivo known_hosts. Na próxima vez que você se conectar, a nova chave do host será adicionada ao seu arquivo known_hosts.

jsbillings
fonte
12
TARGET_HOST=[hostname or IP]

# Remove the old key(s) from known_hosts
ssh-keygen -R $TARGET_HOST

# Add the new key(s) to known_hosts (and also hash the hostname/address)
ssh-keyscan -H $TARGET_HOST >> ~/.ssh/known_hosts

Na próxima vez que você se conectar, você se conectará sem ser solicitado, Are you sure you want to continue connecting (yes/no)?pois as chaves já estarão no known_hostsarquivo.

Earl Ruby
fonte
11
veja também a StrictHostKeyChecking em ~ / .ssh / config
Jeff Schaller
2
Eu usaria um nome de variável diferente .... O HOST está em alguns shells fornecendo o seu próprio nome de host, então prefiro não alterá-lo (eu sei que é possível sair ou fazer isso a partir de um subshell, mas ainda assim , por que não thehost? ou algo assim .. uma variável ALLCAPS pode colidir com um nome interno reservado. os nomes em minúsculas não devem).
Olivier Dulac -
Essas chaves em known_hosts são prefixadas por algumas coisas que começam com | 1 |. Esse material não é anexado ao arquivo por esse método ou estou errado? qual é a diferença então, porque o que o ssh-keyscan retorna não começa com | 1 |
Daniel F
11
(@ DanielF +) se você usar o formato de hash e aceito a chave (s) em sshque existem entradas separadas para o nome do host e seus endereço (s), então você deve ssh-keygen -R cada um deles para evitar o conflito
dave_thompson_085