Dlaczego SSH dodaje wpis znany_host dla adresu IP?

18

Mam hosta o nazwie nms.example.org. W mojej /etc/ssh/ssh_known_hostsmam wpis dla hosta z kluczem RSA. Ten wpis i wszystkie pozostałe wpisy są zarządzane przez mój system zarządzania konfiguracją.

nms.example.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZqfmVPs/XqTS...

Mam również wpis /etc/ssh/ssh_configdla mojego hosta, który ustawia alias klucza hosta. Co, jeśli dobrze rozumiem wszystko, oznacza to, że tylko to nms.example.orgpowinno mieć znaczenie.

Host nms.example.org nms.example nms
    HostKeyAlias nms.example.org
    HostName nms.example.org

Dlaczego więc, kiedy łączę się z klientem, ssh nadal wydaje się myśleć, że musi dodać klucz do moich znanych hostów dla każdego użytkownika z adresem IP hosta?

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /home/zoredache/.ssh/config
debug1: /home/zoredache/.ssh/config line 61: Applying options for *
debug1: /home/zoredache/.ssh/config line 71: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 84: Applying options for nms
debug1: /etc/ssh/ssh_config line 363: Applying options for *
debug1: Connecting to nms.example.org [104.236.190.144] port 22.
debug1: Connection established.
debug1: identity file /home/zoredache/.ssh/zoredache-20140204.id_rsa type 1
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: Permanently added the RSA host key for IP address '192.0.2.144' to the list of known hosts.
debug1: ssh_rsa_verify: signature correct
...

SSH wie, że mój host jest prawidłowy (patrz Host 'nms.example.org' is known and matches the RSA host key:), więc dlaczego dodaje klucz do adresu IP do profilu użytkownika?

Jest to bardzo irytujące, ponieważ kiedy ponownie instaluję komputer, mój system zarządzania konfiguracją dobrze radzi sobie z gromadzeniem i dystrybucją kluczy hosta do całego systemu. Ale pozostaną te pozostające w konflikcie klucze powiązane z adresami IP w plikach znanych_hostów dla poszczególnych zastosowań, które powodują ostrzeżenia przy próbie połączenia, które uniemożliwiają połączenie skryptów.

$ ssh nms -v
OpenSSH_6.0p1 Debian-4+deb7u4, OpenSSL 1.0.1e 11 Feb 2013
...
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u4
debug1: using hostkeyalias: nms.example.org
...
debug1: Server host key: RSA 6b:5f:b6:e9:13:c3:b7:39:1e:ec:74:05:33:64:4d:5e
debug1: using hostkeyalias: nms.example.org
debug1: Host 'nms.example.org' is known and matches the RSA host key.
debug1: Found key in /etc/ssh/ssh_known_hosts:104
Warning: the RSA host key for 'nms.example.org' differs from the key for the IP address '192.0.2.144'
Offending key for IP in /home/zoredache/.ssh/known_hosts:25
Matching host key in /etc/ssh/ssh_known_hosts:104
Are you sure you want to continue connecting (yes/no)?

Jak mogę zapobiec buforowaniu przez SSH tej wartości IP dla każdego użytkownika znane_hosty? Czy jest jakiś powód bezpieczeństwa, dla którego muszę po prostu żyć z tym irytującym zachowaniem? To mnie również frustruje, ponieważ kilka serwerów ma dość dynamiczne adresy IP. Moje zarządzanie konfiguracją obsługuje aktualizacje DNS. Pozostają mi jednak klucze hosta na adres IP wypełniające moje pliki znane_hosty na użytkownika.

Zoredache
źródło

Odpowiedzi:

22

Myślę, że to ma CheckHostIPzadziałać.

Jeśli ta flaga jest ustawiona na „tak”, ssh (1) dodatkowo sprawdzi adres IP hosta w known_hostspliku. Pozwala to ssh wykryć, czy klucz hosta zmienił się z powodu fałszowania DNS. Jeśli opcja jest ustawiona na „nie”, kontrola nie zostanie wykonana. Domyślna wartość to „tak”.

Dostajesz nieco lepszą diagnostykę w przypadku błędnej konfiguracji lub ataku z tą opcją, ale tak naprawdę to nie poprawia bezpieczeństwa w żaden sposób, o jakim mogę myśleć.

Jeśli wyłączysz, CheckHostIPSSH (od OpenSSH 6.7p1) nie rejestruje adresu IP podczas łączenia się z nowym hostem według nazwy. Dodaj to do .ssh/config:

CheckHostIP no

Możesz dodać go do Hostsekcji, jeśli chcesz go wyłączyć tylko dla określonego hosta (szczególnie takiego z dynamicznym adresem IP).

Gilles „SO- przestań być zły”
źródło
Tak, to jest ustawienie, którego potrzebuję.
Zoredache
Chociaż zgadzam się ze wszystkim, co powiedziałeś @Gilles technicznie Chciałbym (przez wzgląd na dobrą dyskusji) powiedzieć, że CheckHostIP yes ma poprawić bezpieczeństwo ... Jeśli użytkownik dokładnie wie co robi, jak system używa tego parametru, a koncepcje domniemanego zaufania. Tak więc naprawdę rozdzieliłbym włosy, czego nie zrobię ...
Zachowam