Jak poznać adres IP jakiegoś hosta somename
, na którym mogę ssh
? Jeśli zrobię to nslookup
na tym hoście, powie „nie ma odpowiedzi”. Jak zatem ssh
rozwiązać jego nazwę?
Ani wyjaśnienie /etc/hosts
nie .ssh/config
zadziałało.
EDYTOWAĆ
Przepraszamy, somename
jest w pełni wykwalifikowany.
ssh somename.somedomain
działa, podczas gdy
ping somename.somedomain
i
nslookup somename.somedomain
nie
ssh
nslookup
host-name-resolution
Przyciemnia
źródło
źródło
/etc/hosts
lub~/.ssh/config
?somename.local
..local
to specjalna domena zarezerwowana dla mDNS. W przypadku LLMNR możesz użyć tego skryptu NMAP.Odpowiedzi:
Nslookup to program do sprawdzania serwerów nazw domen internetowych . Nslookup jest bardzo dobry do wysyłania zapytań do serwerów DNS, ale nie daje pełnego obrazu, jeśli chodzi o rozpoznawanie nazw.
W systemie Linux rozpoznawanie nazw jest najczęściej kontrolowane przez NSS, który jest konfigurowany przez
/etc/nsswitch.conf
. W szczególności ta konfiguracja zawierahosts
wpis. Na przykład:W powyższym wpisie widać, że po pierwszym pytaniu
files
następuje zapytaniedns
, co oznacza, że/etc/hosts
zostanie ono wysłane przed DNS. Istnieją inne opcje, w tym LDAP , Multicast DNS i WINS .Odpowiadając bezpośrednio na twoje pytanie, SSH przekształca nazwę hosta na adres IP za pomocą NSS (pobieranie wyników z wielu źródeł), gdzie nslookup tylko wysyła zapytanie do DNS.
Możesz sprawdzić, który IP NSS rozpoznaje nazwę hosta za pomocą getent. Na przykład, aby rozwiązać
somename
:Również w przypadku SSH możesz skonfigurować informacje specyficzne dla hosta w
/etc/ssh/ssh_config
i~/.ssh/config
. Pozwoli to nawet określić adres IP dla nazwy hosta, całkowicie pomijając rozpoznawanie nazw .:Następujące polecenie SSH do użycia
192.168.1.25
zarówno dla, jakdev
i dladev.example.com
. SSH użyje tego adresu, niezależnie od tego, czy te nazwy istnieją jako nazwy DNS dla innego adresu IP:źródło
Użyj pełnej flagi (
-v
)ssh
polecenia:Dane wyjściowe powinny zawierać między innymi wiersz pokazujący rozstrzygnięty adres IP serwera, z którym się łączysz:
Najbardziej prawdopodobną przyczyną
ssh
rozwiązania nazwy hosta, któranslookup
nie może tego zrobić, jest to, że jest ona skonfigurowana nassh
poziomie.Na stronie
ssh_config(5)
podręcznika są trzy miejsca, w którychssh
szuka się plików konfiguracyjnych:Jeden z tych plików może zawierać nazwę hosta
somename
(lub pasujący do niego wzorzec) jako alias innej nazwy hosta lub adresu IP. Na przykład:Więcej informacji można znaleźć w
ssh_config(5)
objaśnieniachHost
iHostName
dyrektywach podręcznika oraz wPATTERNS
sekcji.źródło
ssh user@someserver
wydaje się, że „rozwiązuje”someserver
nazwę DNS (nawet jeśli tak się nie dzieje). Jeśli plikHost someserver
jest skonfigurowany w.ssh/config
pliku, wówczas możliwe jest użycie polecenia ssh dokładnie tak, jak podaje OP, nawet jeśli wsomeserver
ogóle nie ma go w DNS.ssh -v somename
obejmują adres IP (niezależnie odssh_config
wpisów). Odpowiada więc bezpośrednio na pytanie „Jak poznać adres IP jakiejś nazwy hosta, do którego mogę ssh?”, A także jest dobrym pierwszym krokiem do odpowiedzi „Jak to możliwe, że sshame działa…?”.Philip już prawie tam jest, ale udaje się w dół
.ssh/config
rathole, którego skonfigurowanie jest mało prawdopodobne.Polecenia ...
... wysyła zapytanie do NSS przy użyciu
hosts:
linii wyszukiwania/etc/nsswitch.conf
, a nie tylko DNSnslookup
. Prawdopodobnie twoje środowisko Unix korzysta z więcej niż jednej usługi nazewnictwa; ewentualnie jakiś rodzaj integracji AD.źródło
host
zwykle jest częścią bind-utils (lub odpowiednikiem) i podobnie jak obanslookup
idig
używa tylko DNS. OTOHgetent hosts
(lub ewentualnieahosts
) robi to, co opisujesz .host
odpytuje inne usługi nazewnicze. Uzgodniono, żegetent hosts
jest to najlepsza jednoznaczna metoda zapytania „dowolnych skonfigurowanych usług nazw”.host
jest tylko DNS na stronach podręcznika i potwierdzony przez testy na systemach, których używam (CentOS, Ubuntu, FreeBSD, Solaris), a także na wyższym poziomie . Zobacz także (bliskie) duplikaty, które skomentowałem na Q, które również to mówią.