Dlaczego SSH nie rozwiązuje tej nazwy hosta?

12

Podczas próby połączenia SSH z hostem w sieci o nazwie storagepojawia się błąd rozpoznawania DNS:

$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known

Ale kiedy pytam DNS z hostem, działa

$ host storage
storage has address 192.168.20.103

W jaki sposób hostmożna znaleźć adres IP, ale sshnie można?

jldugger
źródło
14
Zacznij nawyk korzystania z FQDN wszędzie. Jeśli jest to pierwszy problem, który napotkałeś w tym kierunku, masz wyjątkowo szczęście. Mogą być naprawdę włochate, aby je wyśledzić, i to nie będzie twój ostatni. Oto wskazówka: storageto domena najwyższego poziomu na żywo w Internecie.
Michael Hampton
Czy jesteś w stanie „ssh” na 192.168.20.103?
IvanGoneKrazy
2
Gdzie zdefiniowałeś nazwę hosta 192.168.20.103? / etc / hosts?
Sieroty
3
Wpisywanie nazw FQDN jest uciążliwe. Aliasing „storage” do „storage.mydomain.com” w .ssh / config, z drugiej strony, jest naprawdę przydatny.
pjc50,
1
@ pjc50 Piszę, stoa następnie wciskam Tab.
Michael Hampton

Odpowiedzi:

28

sshi hostrozpoznawaj nazwy według zupełnie innych ścieżek, więc nie jest zaskakujące, że czasami dają różne wyniki, szczególnie gdy nazwa do rozpoznania nie jest FQDN (stąd sugeruje się używanie FQDN wszędzie).

Nie wspominasz nic o swoim systemie operacyjnym i konfiguracji systemu, więc muszę zachować ogólność, mając oko na Linuksa: szczegóły MacOS są nieco inne, a Windows jeszcze bardziej, ale ogólne pojęcia są takie same.

  • hostodpytuje DNS, więc w zasadzie sprawdza /etc/resolv.confi wysyła zapytania do wymienionych tam serwerów, ewentualnie dołączając nazwę domeny, jeśli nazwa hosta nie jest jeszcze w pełni kwalifikowana. Ignoruje każde inne możliwe źródło, ale należy pamiętać, że w dzisiejszych czasach wiele systemów ma lokalny buforujący serwer DNS (zwykle dnsmasq), który czyta /etc/hostsi inne źródła przed wysłaniem zapytania do innych serwerów DNS, więc jeśli hostzapytania od tego lokalnego serwera, /etc/hostsmogą się wkraść.

  • sshpodąża własną ścieżką. Opiszę, co opensshrobi pod Linuksem, inne implementacje różnią się. Najpierw szuka pseudonimów hosta zdefiniowanych w plikach konfiguracyjnych (systemowych /etc/ssh/ssh_configi dla użytkownika ~/.ssh/config), a następnie przeszukuje inne źródła w kolejności określonej przez hosts:dyrektywę w /etc/nsswitch.conf. Powiedz, że to coś takiego:

    hosts: files dns
    

    oznacza to: zajrzyj /etc/hostsdo DNS, a następnie zapytaj ( /etc/resolv.confponownie). Innymi możliwymi źródłami są przestarzałe nisi netinfousługi, LDAP, active directory, nazywacie je.

Aby debugować konkretny przypadek, powinieneś podążać ścieżką implementacji podążania sshi dowiedzieć się, gdzie utknie.

Dario
źródło
6
ltrace / strace może dać ci wskazówki, w jaki sposób ssh faktycznie próbuje rozwiązać domenę ... i jak najbliżej tego, jak to robi, narzędzie dns z linii poleceń jest prawdopodobnie getent.
rackandboneman,
Twoja rekomendacja przejścia /etc/nsswitch.confna czytanie hosts: files dnsdziałała dla mnie. Jako ciekawą notatkę dodatkową, założyłem kilka Raspberry Pis z Raspian Jessie w ciągu ostatnich kilku tygodni i wszyscy oni wymagali tej zmiany.
Patrick Tucci