SSH do skrzynki z często zmienianym adresem IP

22

Mam niektóre chmurki, które często zmieniają adres IP.

Ssh używam nazwy hosta, ale muszę edytować plik znane_hosty przy każdym uruchomieniu serwera z powodu tego komunikatu o błędzie:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

Czy oprócz ryzyka związanego z bezpieczeństwem, które są związane z tym, co chcę zrobić, istnieje sposób na zignorowanie tego błędu lub automatyczne zastąpienie pliku znane_hosty, tak że nie zawsze muszę go edytować?

coneybeare
źródło

Odpowiedzi:

20

Edytuj plik ssh_config i dodaj zmień ten wiersz:

CheckHostIP no

CheckHostIP domyślnie ma wartość „tak”. W tym przypadku wystarczy wykonać sprawdzenie, którego się nie powiedzie. Wyłączenie oznacza, że ​​po prostu ufa, że ​​adres IP jest zmienny, i będzie chciał sprawdzić klucz względem nazwy hosta.

sysadmin1138
źródło
2
Wyłącza to funkcję bezpieczeństwa dla wszystkich serwerów, z którymi kiedykolwiek będziesz się łączyć, co jest bardzo złą praktyką. Zamiast tego powinieneś użyć tej opcji tylko dla określonego hosta, o którym wiesz, że będzie miał ten problem - lub użyj opcji HostKeyAlias ​​- ponownie dla określonego hosta.
zaTricky
@zaTricky „Niezwykle zła praktyka”? Co jest takiego ekstremalnego w tym hmm? Myślę, że jest tak samo bezpieczny, to po prostu indywidualne preferencje. Wystarczy przypiąć klucz do nazwy hosta (zamiast adresu IP). W przypadku protokołu https HPKP działa podobnie i wszyscy mówią, że jest bezpieczny lub nadmiernie bezpieczny.
kubańczyk
@kubanczyk Mówi się o tym, aby uczynić go globalnym otoczeniem - brak wskazówek dotyczących określania hosta, o czym
wspomniałem
25

Dodanie: możesz spróbować wyłączyć sprawdzanie CheckHostIP dla tej nazwy:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no
Koos van den Hout
źródło
5
Jest to najlepsza opcja, aby zmniejszyć wpływ bezpieczeństwa na wyłączenie sprawdzania adresu IP.
Espo
3

Wiele odpowiedzi tutaj zadziała - ale technicznie są to obejścia. OpenSSH ma już wbudowaną funkcję mając to na uwadze: HostKeyAlias.


W pliku .ssh / config dodaj HostKeyAlias <alias>do konfiguracji hosta:

host myserver.example.com
HostKeyAlias myserver.example.com

Dzięki temu w miejscu łączenia się z serwerem myserver.example.comnie będzie używać nazwy hosta lub adres IP lokalnego odniesienia - będzie to zawsze tylko korzystać z danego HostKeyAlias podczas podłączania do tego serwera. Dla mnie sensowne jest używanie nazwy hosta - ale oczywiście możesz użyć dowolnego aliasu, który ci się podoba.


Typowe konfiguracje dla dynamicznych hostów są takie:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Można tego również użyć w niektórych niejasnych scenariuszach, w których wiesz, że kilka serwerów ma te same klucze hosta (generalnie nie powinno tak być). Pozwoliłoby to uniknąć duplikatów wpisów. W przyszłości, jeśli klucze zostaną legalnie zmienione, nie musisz zastępować / usuwać wielu wpisów. Tylko jeden. Serwery Geo Gitlab są tego dobrym przykładem.


Jeśli chodzi o czyszczenie pliku znanego_hosta, sugerowałbym przyjrzenie się innym pytaniom / odpowiedziom związanym konkretnie z utrzymywaniem / usuwaniem starych wpisów znanego_hosta. Na przykład zobacz Jak zarządzać moim plikiem .ssh / known_hosts ; Jestem pod szczególnym wrażeniem odpowiedzi user1953828, choć widzę, że nie ma jeszcze wielu pozytywnych opinii. :)

zaTricky
źródło
Pokazuje to, ile wartość odpowiedź z tego samego dnia ma na SO w porównaniu z właściwą odpowiedzią udzieloną 8 lat później.
parzystość3
2

Używam tych podejrzanych opcji, aby obejść ten problem. (Klucz publiczny mojego hosta jest generowany dość często. W ten sposób usuwa się adres IP i sprawdzenie klucza)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

Możesz również użyć tego, jeśli klucz pozostaje taki sam, ale zmienia się adres IP:

ssh remoteServerName -l username -o "CheckHostIP=no"
Zv_oDD
źródło
Jeśli Twój serwer często zmienia klucze hosta, powinieneś rozważyć skonfigurowanie podpisywania klucza hosta
Cameron Tacklind
1

Możesz ustawić StrictHostKeyChecking = no w konfiguracji klienta ssh (tzn. Plik ~ / ssh / config na komputerze, z którym się łączysz), aby zignorować ostrzeżenie.

Hayalci
źródło
1

Możesz umieścić CheckHostIP now swoim ~/.ssh/configpliku, ale to pozostawia cię otwartym na ataki fałszowania. Jeśli nie przejmujesz się tym, to ustawienie powinno wyłączyć known_hostssprawdzanie.

Steven Monday
źródło
0

Unikam dodawania odcisków palców do mojego known_hostspliku podczas łączenia się z przejściowymi maszynami AWS. Używam polecenia takiego jak

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem [email protected]

połączyć się z nimi. Nie pojawi się pytanie, czy chcesz dodać komputer „do listy znanych hostów”. Zastąp 10.0.0.5adres IP komputera i secret.pempełną ścieżkę klucza Ssh. Nadal będziesz otrzymywać ostrzeżenia, które 10.0.0.5zostały dodane, ale naprawdę zniknęły /dev/null. Robię to wystarczająco często, aby ustawić sobie alias~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Zastrzegam ssh [email protected]polecenia typu dla maszyn, na których miałem problem ze sprawdzeniem odcisku palca.

Hbar
źródło
Ma to sens tylko dla serwerów kiedykolwiek połączyć się raz - ale są lepsze sposoby, aby pozbyć się przeterminowanych zgłoszeń - i nie powinno być , że zaniepokojony jak brudny złożyć known_hosts jest. Prawdopodobnie poświęciłeś znacznie więcej czasu i energii na tworzenie tego aliasu niż wartość, którą ci przyniósł.
zaTricky
-2

Ustaw znane_hosty tylko do odczytu.

Eldelshell
źródło
To zrywa funkcjonalność, gdy pragmatyczne opcje są łatwo dostępne. : - /
zaTricky