Czy można usunąć określony klucz hosta z pliku znane_hosty SSH?
Zwykle usuwam cały known_hosts
plik, z którym nie mam problemów, ale z ciekawości, czy można usunąć tylko jeden wpis?
Otworzyłem known_hosts
plik, ale staram się zrozumieć jego zawartość.
Poniżej znajduje się wiadomość, z którą się spotkałem, która skłoniła mnie do zadania tego pytania:
Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
Original contents retained as /Users/nha/.ssh/known_hosts.old
zakładając, że jest tak samo dla Ubuntu).ssh-keygen -R [ssh.sssshh.com]:1234
Tak, możesz usunąć tylko jeden klucz. Po prostu otwórz go w edytorze i usuń naruszającą linię. Liczba po dwukropku w komunikacie o błędzie jest numerem linii, więc jest to linia do usunięcia - linia 1 w twoim przykładzie.
źródło
Dopiero niedawno zacząłem używać kluczy hosta, ale kiedy pomieszałem z nimi, jest to zwykle jeden klucz na linię, więc wykonaj kopię zapasową pliku i usuwaj je pojedynczo, aż znajdziesz właściwy. Następnie dodaj pozostałe z powrotem. Trochę długa droga, aby to zrobić, ale powinna działać.
Również w oparciu o ten błąd i nie mając pojęcia, co to może być pierwszy klucz hosta w pliku, który jest problemem, więc otwórz plik za pomocą vima
vim ~/.ssh/known_hosts
i uderzył
dd
następnie zapisz to.
źródło
Używanie ssh-keygen -R nazwa hosta nie zawsze będzie działać. Jeśli masz nowszą wersję SSH, która „ukrywa” nazwy hostów, aby zapobiec przejęciu agenta ssh, najwyraźniej ssh-keygen nie jest w stanie odblokować nazwy hosta.
Na przykład mam hosta o nazwie build-node-01 i podłączyłem się do niego i zaakceptowałem klucz. Następnie odbudowuję go od zera, otrzymuję nowy odcisk palca hosta i próbuję się połączyć ponownie, otrzymam ostrzeżenie, że na linii X wystąpił konflikt (powiedzmy 3). Biegnę
ssh-keygen -R hostname
, ale przy następnej próbie połączenia nadal otrzymuję ostrzeżenie o konflikcie. Przejrzałem plik tylko po to, aby stwierdzić, że[1] Bu4Ch@R@4D0M57uFF
nazwa hosta została zaszyfrowana i pojawiła się jako zamiast czytelnej nazwy hosta.W takim przypadku jedynym sposobem, aby skutecznie usunąć winnego hosta, było użycie
Aby pójść o krok dalej, możesz wykonać kopię zapasową znanych_hostów na wypadek usunięcia niewłaściwej linii, w tym przypadku po prostu dodaj .bak (lub dowolne rozszerzenie) do opcji -i, aby utworzyć kopię zapasową z tym rozbudowa. Korzystanie z ssh-keygen robi to automatycznie.
źródło
ssh-keygen -R {hostname}
będzie działać, nawet gdy nazwy hostów są „ukryte” (mieszane). Tak, tak, można usunąć wpis według numeru (np. 10 wpis przezsed -i.bak 10d ~/.ssh/known_hosts
), ale nie jest to zwykle konieczne. Możliwe, że użyto niestandardowego portu, w którym to przypadku konieczne może być sformatowanie polecenia jako (notowania):ssh-keygen -R '[hostname]:2222'
Wystarczy podzielić się kolejną czystą i łatwą odpowiedzią, którą właśnie znalazłem. Usunięcie nazwy hosta jest dla mnie dostępne, ponieważ plik znany_hosts jest zaszyfrowany. MOGĘ jednak ręcznie edytować wpis hosta na podstawie numeru wiersza w komunikacie o błędzie. Jak zauważył wcześniej Mike Scott, obrażający numer wiersza nazwy hosta znajduje się w komunikacie o błędzie.
Albo mogę to zrobić. Stąd: jak naprawić obrażający klucz w pliku ssh known_hosts
Mam trochę magii cli
Zamień x na numer linii i voila. Oferuje również perlową odpowiedź, jeśli sed nie zadziała.
źródło
W tym przypadku 10.20.120.211 jest hostem, który chcę usunąć z mojego pliku znane_hosty, pamiętaj, aby uciec od znaków specjalnych, takich jak (.)
źródło
ssh-keygen -R ...
(najlepiej); lubsed
z określonym numerem wiersza do usunięcia. Ponadto,sed
w miejscu, użyj-i' option; e.g.,
sed -i.bak 10d ~ / .ssh / known_hosts`, aby usunąć 10. linię i (opcjonalnie) zachować oryginał w pliku kopii zapasowej z przyrostkiem.bak
.Możesz uniknąć usunięcia określonego hosta, aktualizując go:
W ten sposób nie musisz ponownie łączyć się z hostem.
źródło