it-swarm-eu.dev

Rimuovi la chiave da known_hosts

Ho costruito diverse macchine virtuali nelle ultime settimane. Il problema è che .ssh/known_hosts mi dà l'avviso Man in the middle . Ciò accade perché un'altra impronta digitale è associata all'IP della macchina virtuale.

Nel file .ssh/known_hosts, tuttavia, non trovo il record relativo all'IP, solo due bizzarre stringhe a chiave e "ssh-rsa".

Qualcuno ha qualche idea su come rimuovere la vecchia chiave da known_hosts?

128
Adam Matan
sed -i '6d' ~/.ssh/known_hosts

Modifica il file ~/.ssh/known_hosts: 6, rimuovendo la sesta riga.

Secondo me, usare ssh-keygen -R è una soluzione migliore per un utente openssh power, mentre il tuo normale amministratore di Linux farebbe meglio a mantenere fresche le sue capacità sed utilizzando il metodo di cui sopra.

83
mikewaters

La soluzione più semplice è:

rm -f .ssh/known_hosts

ssh ricreerà di nuovo il file, ma perderai il controllo delle chiavi per gli altri host!

Oppure puoi usare:

ssh-keygen -R "hostname"

O il messaggio ssh "man-in-the-middle" dovrebbe indicare quale riga del file known_hosts ha l'impronta digitale offendente. Modifica il file, passa a quella riga ed eliminalo.

111
Sean Staats

C'è un interruttore ssh-keygen (-R) per questo.

man ssh-keygen dice:

-R hostname Rimuove tutte le chiavi che appartengono ad hostname da un file known_hosts. Questa opzione è utile per cancellare gli host hash (vedi l'opzione -H sopra).

70
user201564

L'avviso indicherà la riga esatta nel file degli host noti.

Ecco un esempio:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       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!

Vedi la parte /home/user/.ssh/known_hosts:6? Specifica il numero di file e di riga.

18
innaM

È anche possibile indicare a ssh di non controllare il file known_hosts utilizzando i flag UserKnownHostsFile e StrictHostKeyChecking.

Per esempio:

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

Per facilità d'uso puoi fare alias questo:

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

Ora puoi semplicemente boldssh quando sei sicuro di avere fiducia nel certificato del server.

8
rouble

È necessario eseguire il seguente comando per sbarazzarsi di questo problema. Apri il terminale e digita il seguente comando:

Per tutti gli esempi di seguito basta sostituire il valore dopo -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
8
Tarun Gupta

Puoi anche rimuovere una singola riga da host conosciuti con ad es. rmknownhost 111 (111 è la riga da rimuovere):

#! /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 * ""}

Salva questo come rmknownhost in una cartella dal tuo PATH.

2
grosser

Tutte le risposte sono buone, ma per il vero SSH pro abbiamo perso le informazioni su come rimuovere la firma ssh con il numero di porta.

Per esempio. ti connetti a

ssh some.Host.name -p 222

e ricevi un avvertimento e per rimuoverlo devi usare il numero di porta dei due punti del quadrato:

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

Spero che questo aiuti per gli utenti di configurazione non standard.

0
Arunas Bartisius

La voce per il nome host o ip deve essere nella prima colonna. L'avviso dovrebbe anche elencare un numero di linea in cui si trova la chiave offendente.

0
stimms

È un file di testo. Puoi facilmente modificare con vi (m) e cancellare semplicemente la riga in questione (gg) e salvare il file (wq). Ma se esiste un comando specifico per rimuovere un host, questo è probabilmente il metodo più sicuro.

0
Ryan Griggs