Czy tymczasowo zignorować mój plik `~ / .ssh / known_hosts`?

48

Czy istnieje sposób na tymczasowe zignorowanie mojego ~/.ssh/known_hostspliku?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

UWAGA:

.. po kilku odpowiedziach / komentarzach zdaję sobie sprawę, że moje pytanie jest nieco mylące, tak krótkie, że jest oczekiwanym zachowaniem), więc jest normalne (w moim przypadku) ma uzasadniony powód, dla którego ja chcesz zobaczyć „zignoruj”)

Alexus
źródło
9
Zadajesz złe pytanie. Nie powinieneś „ignorować” problemu; powinieneś dowiedzieć się, co się dzieje i rozwiązać to.
Michael Hampton
9
Nie mogę mówić w imieniu użytkownika, ale jednym z przykładów może być sytuacja, w której opracowujesz proces automatycznej instalacji (taki jak kickstart), w której iteracyjny przepływ pracy obejmuje budowanie, łączenie, testowanie, modyfikowanie procesu kompilacji i przebudowę z drapać w kółko.
Goladus
10
@MichaelHampton - Cały czas to otrzymuję, ponieważ VMware i VirtualBox przetwarzają adresy IP gości. Dla mnie jest to prawidłowe pytanie :)
1
FWIW Wciąż szukam tej odpowiedzi, ponieważ mam system w mojej sieci LAN, w którym korzystam z dropbear (z innym kluczem hosta), aby wprowadzić hasło szyfrowania dysku podczas uruchamiania.
Zulan
1
@jww To niewłaściwe pytanie / rozwiązanie dla twojego scenariusza. Zamiast tego powinieneś skonfigurować SSH, aby ignorował adres IP, ale nadal sprawdzał klucz hosta. Zobacz na przykład tutaj
Jon Bentley

Odpowiedzi:

56

Możesz użyć ssh -o StrictHostKeyChecking=nodo known_hostschwilowego wyłączenia sprawdzania . Ale odradzałbym to. Naprawdę powinieneś sprawdzić, dlaczego zmienił się klucz hosta.

Inną opcją jest dodanie określonego wpisu ~/.ssh/configdla danego hosta. To może być poprawne podejście, jeśli masz określonego hosta, który generuje nowe klucze hosta za każdym razem, gdy uruchamia się ponownie i jest restartowany z ważnego powodu kilka razy dziennie.

Host <your problematic host>
  StrictHostKeyChecking no
Sami Laine
źródło
takie jest oczekiwane zachowanie), więc jest to normalne (w moim przypadku)
alexus
1
@alexus Jeśli jest to „oczekiwane”, możesz zastosować tę opcję do konkretnej nazwy hosta / adresu IP, dla którego się spodziewasz.
Chrylis -on strike-
1
@alexus I pamiętaj, że jeśli to zrobisz, prawie stracisz całą ochronę zapewnianą przez ssh. Równie dobrze możesz korzystać z telnetu, ponieważ dla MITM i przechwytywania całego ruchu byłoby to banalne.
Michael Hampton
1
To już nie działa (przynajmniej dla OpenSSH_5.3p1)
draeath 12.01.17
-o StrictHostKeyChecking=nousuwa możliwość logowania za pomocą hasła. Czy brak tej flagi nie stoi w sprzeczności z zasadami uniksowymi pozwalającymi użytkownikowi wymuszać zachowanie? Obecnie próbuję zalogować się do komputera lokalnego za pomocą lokalnego adresu IP. Klucz hosta zmienił się, ponieważ sformatowałem tę maszynę. Wszystko tutaj ma sens i w tych okolicznościach nic nie stanowi zagrożenia bezpieczeństwa.
Wowfunhappy
31

Aby całkowicie zignorować znany plik hosts w środowisku POSIX, ustaw opcje GlobalKnownHostsFilei UserKnownHostsFilena /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

Ustawienie tej StrictHostKeyChecking=noopcji pozwoli ci się połączyć, ale SSH nadal wyświetli ostrzeżenie :

ssh -o StrictHostKeyChecking=no user@host

Jak zauważyli inni, prawdopodobnie lepiej jest rozwiązać podstawowy problem. Można na przykład rozważyć uwierzytelnienie certyfikatu SSH w celu weryfikacji hostów.

MattB
źródło
2
To może być lepsza odpowiedź niż obecnie najwyżej oceniana, ponieważ pozwala na użycie uwierzytelniania hasła, które w innym przypadku byłoby wyłączone (oczywiście powinieneś zrozumieć, co dokładnie robisz przed wpisaniem hasła ...)
VZ.
Jestem trochę mylić tutaj: Nie należy również używać -o StrictHostKeyChecking=no oprócz tych -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullopcji - do ostatecznej odpowiedzi z?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Gabriel Staples
Powiązany zapis Znalazłem online: shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples
5

Jeśli przeinstalowałeś serwer i dlatego Identyfikacja uległa zmianie, powinieneś po prostu usunąć określony wiersz 155 z /Users/alexus/.ssh/known_hostsi kontynuować.

Jeśli przełączasz się między różnymi sieciami prywatnymi, powinieneś użyć nazwy hosta, aby się połączyć, ponieważ klient ssh również zapisuje klucze w zależności od nazwy hosta. Dodaj coś takiego do swojego /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

a następnie użyj ssh server1po podłączeniu do podsieci 1 i ssh server2po podłączeniu do podsieci 2. W ten sposób oba serwery mogą mieć różne klucze hosta.

etagenklo
źródło
Co się stanie, jeśli przełączysz się między dwiema sieciami prywatnymi i podłączysz do dwóch takich samych adresów IP?
alexus
1
Zredagowałem swoją odpowiedź.
etagenklo,
2
@alexus Następnie potrzebujesz IPv6 :) Ale byłoby to przydatne informacje w twoim pierwotnym pytaniu.
Michael Hampton
2

-o StrictHostKeyChecking=no działa tylko wtedy, gdy host nie jest jeszcze obecny w pliku znane_hosty.

Myślę, że to jest czystsze (bez ostrzeżeń), jeśli oczekujesz zmiany klucza hosta, być może z powodu klonowania vm, aby wymusić ignorowanie tego rodzaju hostów:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"
Jose Sa
źródło
2

Niektórzy twierdzą, że to nie w porządku, nie rób tego i tak dalej, ale potrzebuję tego również do testowania kilku urządzeń osadzonych w kółko. Musisz wyłączyć StrictHostKeyChecking=no, to prawda, ale także zresetować plik znanego hosta do /dev/null. Oto przykład z autologinem i psna zdalnym urządzeniu.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'
eddso
źródło
-2

Zaloguj się do wszystkich serwerów (i jeśli RedHat), rm -f /etc/ssh/ssh_host_*a następnie uruchom ponownie dysk SSHD.

Spowoduje to utworzenie nowych kluczy hosta SSH, których nie trzeba ignorować.

Mogę wymyślić tylko jeden przypadek, w którym klucze SSH sklonowane na wielu serwerach są nie tylko pożądane, ale także nie generują żadnych ostrzeżeń. Wielokrotność jednego rekordu A. Wszystkie hosty z rekordem A mają ten sam klucz.

Niels
źródło
6
Ta odpowiedź jest niepoprawna. Odcisk palca jest lokalny na kliencie.
89c3b1b8-b1ae-11e6-b842-48d705