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

Verwijder de sleutel uit known_hosts

Ik heb de afgelopen weken verschillende virtuele machines gebouwd. Het probleem is dat de .ssh/known_hosts mij de Man in het midden waarschuwing geeft. Dit gebeurt omdat er een andere vingerafdruk is gekoppeld aan de virtuele machine IP.

In het .ssh/known_hosts-bestand vind ik echter niet het record met betrekking tot het IP, alleen twee bizarre, sleutelachtige strings en “ssh-rsa”.

Heeft iemand enig idee hoe de oude sleutel uit known_hosts te verwijderen?

Antwoorden (11)

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

De eenvoudigste oplossing is:

rm -f .ssh/known_hosts

ssh zal het bestand opnieuw maken, maar je verliest de sleutelcontrole voor andere hosts!

Of, je kan gebruiken:

ssh-keygen -R "hostname"

of de ssh “man-in-the-middle” boodschap moet aangeven welke regel van het gekende bestand de beledigende vingerafdruk heeft. Bewerk het bestand, spring naar die regel en verwijder het.

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

zal het bestand ~/.ssh/bekende_hosts:6 wijzigen, waardoor de 6e regel wordt verwijderd.

Naar mijn mening is het gebruik van ssh-keygen -R een betere oplossing voor een openssh power gebruiker, terwijl je reguliere Linux admin beter zijn/haar sed vaardigheden fris kan houden door gebruik te maken van de bovenstaande methode.

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

Hiervoor is een ssh-keygen schakelaar (-R).

man ssh-keygen leest:

-R hostname

Verwijdert alle sleutels die bij hostname horen uit een known_hosts-bestand. Deze optie is handig om gehashte hosts te verwijderen (zie de -H optie hierboven).

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

De waarschuwing vertelt je de exacte regel in het bekende hosts bestand.

Hier is een voorbeeld:

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

Zie het /home/user/.ssh/known_hosts:6 deel? Het specificeert het bestand en het regelnummer.

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

Je moet het volgende commando uitvoeren om van dit probleem af te komen. Open de terminal en typ het volgende commando:

Voor alle onderstaande voorbeelden vervang je gewoon de waarde na -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

Je kunt ssh ook opdracht geven om het bekende hosts-bestand niet te controleren met behulp van het UserKnownHostsFile en StrictHostKeyChecking flags.

Bijvoorbeeld:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Voor het gebruiksgemak kun je een alias geven:

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

. Nu kun je gewoon boldssh wanneer je er zeker van bent dat je het certificaat van de server vertrouwt.

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

Alle antwoorden zijn goed, maar voor echte SSH pro hebben we ontbrekende informatie over hoe de ssh handtekening met poortnummer te verwijderen.

  • Eenvoudig SSH host handtekening verwijderen commando:

  • Complexe ssh sleutel verwijderen, bijv. je maakt verbinding met ssh op niet-standaard poort 222:

en je krijgt een waarschuwing, en om dit te verwijderen moet je vierkante haakjes gebruiken voor het poortnummer:

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

Hoop dat dit helpt voor gebruikers met een niet-standaard configuratie.

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

Hier is een methode die gebruik maakt van Ex editor:

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

waarbij 6e uw regelnummer is dat in het waarschuwingsbericht wordt vermeld. Zoals deze:

Offending key voor IP in /home/user/. ssh/bekende_hosts:6 <== LIJNNNUMMER

  • *

In het algemeen wordt geadviseerd om ex (http://mywiki.wooledge.org/BashFAQ/021#Using_nonstandard_tools) te gebruiken om de bestanden niet-interactief te bewerken, in plaats van sed, wat meer een S tream ED itor is en zijn -i parameter die een niet-standaard FreeBSD-extensie is.

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

U kunt ook een enkele regel van bekende hosts verwijderen met bijvoorbeeld rmknownhost 111 (111 is de te verwijderen regel):

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

Sla dit op als rmknownhost in een map van uw PATH.

0
0
0
2009-08-26 16:13:25 +0000

De vermelding voor de hostnaam of ip moet in de eerste kolom staan. De waarschuwing moet ook een regelnummer vermelden waar de overtredende sleutel ligt.

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

Het is een tekstbestand. U kunt het eenvoudig bewerken met vi(m) en de betreffende regel (dd) verwijderen, en het bestand opslaan (wq). Maar als er een specifiek commando is om een host te verwijderen, is dat waarschijnlijk de veiligste methode.