Podczas próby połączenia SSH z hostem w sieci o nazwie storage
pojawia 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 host
można znaleźć adres IP, ale ssh
nie można?
domain-name-system
ssh
jldugger
źródło
źródło
storage
to domena najwyższego poziomu na żywo w Internecie.sto
a następnie wciskam Tab.Odpowiedzi:
ssh
ihost
rozpoznawaj 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.
host
odpytuje DNS, więc w zasadzie sprawdza/etc/resolv.conf
i 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 (zwyklednsmasq
), który czyta/etc/hosts
i inne źródła przed wysłaniem zapytania do innych serwerów DNS, więc jeślihost
zapytania od tego lokalnego serwera,/etc/hosts
mogą się wkraść.ssh
podąża własną ścieżką. Opiszę, coopenssh
robi pod Linuksem, inne implementacje różnią się. Najpierw szuka pseudonimów hosta zdefiniowanych w plikach konfiguracyjnych (systemowych/etc/ssh/ssh_config
i dla użytkownika~/.ssh/config
), a następnie przeszukuje inne źródła w kolejności określonej przezhosts:
dyrektywę w/etc/nsswitch.conf
. Powiedz, że to coś takiego:oznacza to: zajrzyj
/etc/hosts
do DNS, a następnie zapytaj (/etc/resolv.conf
ponownie). Innymi możliwymi źródłami są przestarzałenis
inetinfo
usługi, LDAP, active directory, nazywacie je.Aby debugować konkretny przypadek, powinieneś podążać ścieżką implementacji podążania
ssh
i dowiedzieć się, gdzie utknie.źródło
/etc/nsswitch.conf
na czytaniehosts: files dns
dział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.