2009-08-26 16:00:30 +0000 2009-08-26 16:00:30 +0000
140
140

Rimuovere la chiave da known_hosts

Ho costruito diverse macchine virtuali durante le ultime settimane. Il problema è che l’.ssh/known_hosts mi dà l'avviso Man in the middle . Questo 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 simili a chiavi e “ssh-rsa”.

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

Risposte (11)

139
139
139
2009-08-26 16:11:22 +0000

La soluzione più semplice è:

rm -f .ssh/known_hosts
``` ```
ssh-keygen -R "hostname"

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

Oppure, si può usare:

&001

Oppure il messaggio “man-in-the-middle” di ssh dovrebbe indicare quale linea del file noto_hosts ha l'impronta digitale offensiva. Modificare il file, saltare a quella riga e cancellarla.

91
91
91
2010-07-02 17:56:38 +0000
sed -i '6d' ~/.ssh/known_hosts

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

A mio parere, l'utilizzo di ssh-keygen -R è una soluzione migliore per un power user di openssh, mentre il vostro normale amministratore di Linux farebbe meglio a mantenere fresche le sue capacità di sed utilizzando il metodo di cui sopra.

89
89
89
2013-02-22 18:41:50 +0000

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

man ssh-keygen legge:

-R hostname

Rimuove tutte le chiavi appartenenti a hostname da un file known_hosts. Questa opzione è utile per cancellare gli host hashed (vedi l'opzione -H sopra).

18
18
18
2009-08-26 16:17:33 +0000

L'avvertenza vi dirà la riga esatta nel file host conosciuto.

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 file e il numero di riga.

11
11
11
2016-05-28 09:28:08 +0000

È necessario eseguire il seguente comando per eliminare questo problema. Aprire il terminale e digitare il seguente comando:

Per tutti gli esempi che seguono 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
8
8
2014-03-12 16:05:22 +0000

Potete anche istruire ssh a non controllare il file known_hosts utilizzando le bandiere UserKnownHostsFile e StrictHostKeyChecking.

Per esempio:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com
``` ```
alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Per facilità d'uso potete chiamare questo:

&001 &001

Ora potete semplicemente boldssh ogni volta che siete sicuri di fidarvi del certificato del server.

4
4
4
2018-05-16 08:03:38 +0000

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

  • Semplice SSH host firma rimuovere comando:

  • Complesso ssh chiave rimuovere, ad esempio si collega a ssh sulla porta non standard 222:

e si ottiene avviso, e per rimuovere questo, è necessario utilizzare parentesi quadre due punti numero di porta:

ssh-keygen -R [example.com]:222

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

1
1
1
2019-10-09 16:59:56 +0000

Ecco un metodo che utilizza l'editor Ex:

ex +6d -scwq ~/.ssh/known_hosts

dove il 6° è il numero di linea menzionato nel messaggio di avviso. Come questo:

Chiave offensiva per IP in /home/utente/. ssh/known_hosts:6 <== NUMERO DI LINEA


In generale, si consiglia di usare ex per modificare i file in modo non interattivo , invece di sed, che è più un S tream ED itor e il suo parametro -i che è un'estensione FreeBSD non standard.

0
0
0
2010-06-22 16:32:09 +0000

Si può anche rimuovere una singola linea da host conosciuti con ad esempio rmknownhost 111 (111 è la linea 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 * ""}
``` &001 



Salva questo come `rmknownhost` in una cartella dal tuo `PATH`.
0
0
0
2009-08-26 16:13:25 +0000

La voce per il nome host o ip dovrebbe essere nella prima colonna. L'avvertenza dovrebbe anche elencare un numero di riga dove si trova il tasto offensivo.

0
0
0
2014-06-27 13:23:54 +0000

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