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

Usuń klucz z known_hosts

Zbudowałem kilka maszyn wirtualnych w ciągu ostatnich kilku tygodni. Problem w tym, że .ssh/known_hosts daje mi ostrzeżenie Man in the middle . Dzieje się tak dlatego, że kolejny odcisk palca jest związany z IP maszyny wirtualnej.

W pliku .ssh/known_hosts nie znajduję jednak zapisu związanego z IP, tylko dwa dziwne, kluczopodobne ciągi i “ssh-rsa”.

Czy ktoś ma jakiś pomysł jak usunąć stary klucz z known_hosts?

Odpowiedzi (11)

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

Najprostsze rozwiązanie to:

rm -f .ssh/known_hosts

ssh odtworzy plik ponownie, ale tracisz sprawdzanie kluczy dla innych hostów!

Albo możesz użyć:

ssh-keygen -R "hostname"

Albo wiadomość ssh “man-in-the-middle” powinna wskazywać, która linia znanego pliku _hosts ma obraźliwy odcisk palca. Edytuj plik, przeskocz do tej linii i usuń go.

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

Zmodyfikuje plik ~/.ssh/known_hosts:6 , usuwając szóstą linię.

Moim zdaniem, użycie ssh-keygen -R jest lepszym rozwiązaniem dla użytkownika openssh power, podczas gdy zwykły administrator Linuksa zrobiłby lepiej aby utrzymać swoje umiejętności seda na świeżym powietrzu używając powyższej metody.

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

Jest do tego przełącznik ssh-keygen (-R).

man ssh-keygen brzmi:

-R hostname

Usuwa wszystkie klucze należące do hostname z pliku known_hosts. Ta opcja jest przydatna do usuwania hashedów (patrz opcja -H powyżej).

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

Ostrzeżenie poda dokładną linię w znanym pliku hostów.

Oto przykład:

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

Zobacz część /home/user/.ssh/known_hosts:6? Określa ona plik i numer linii.

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

Musisz wykonać następujące polecenie, aby pozbyć się tego problemu. Otwórz terminal i wpisz następującą komendę:

Dla wszystkich przykładów poniżej po prostu zamień wartość po -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

Możesz również poinstruować ssh, aby nie sprawdzał znanego pliku _hosts używając flag UserKnownHostsFile i StrictHostKeyChecking.

Na przykład:

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

Dla łatwości obsługi możesz nadać pseudonim:

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

Teraz możesz po prostu śmiało, kiedy jesteś pewien, że ufasz certyfikatowi serwera.

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

Wszystkie odpowiedzi są dobre, ale dla prawdziwego SSH pro brakuje nam informacji jak usunąć sygnaturę ssh z numerem portu.

  • Proste polecenie usunięcia sygnatury hosta SSH:

  • Kompleksowe usunięcie klucza ssh, np. łączymy się z ssh na niestandardowym porcie 222:

i otrzymujemy ostrzeżenie, a aby to usunąć, należy użyć kwadratowych nawiasów numer portu dwukropka:

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

Mam nadzieję, że pomoże to użytkownikom niestandardowej konfiguracji.

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

Oto metoda wykorzystująca edytor Ex:

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

gdzie 6. jest numerem Twojej linii wymienionej w komunikacie ostrzegawczym. Takich jak ten:

Offending key for IP in /home/user/. ssh/known_hosts:6 <== LINE NUMBER

  • *

Ogólnie rzecz biorąc, zaleca się używanie ex do edycji plików nieinteraktywnie , zamiast sed, który jest bardziej S tream ED itor i jego parametru -i, który jest niestandardowym rozszerzeniem FreeBSD.

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

Możesz również usunąć pojedynczą linię ze znanych hostów z np. rmknownhost 111 (111 to linia do usunięcia):

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

Zapisz to jako rmknownhost w folderze z PATH.

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

Wpis dotyczący nazwy hosta lub ip powinien znajdować się w pierwszej kolumnie. Ostrzeżenie powinno również zawierać numer linii, w której znajduje się obraźliwy klucz.

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

To jest plik tekstowy. Możesz łatwo edytować za pomocą vi(m) i po prostu usunąć daną linię (dd), i zapisać plik (wq). Ale jeśli istnieje konkretne polecenie, aby usunąć hosta, jest to prawdopodobnie najbezpieczniejsza metoda.