Bagaimana bisa somename ssh bekerja, sementara nslookup somename tidak?

16

Bagaimana cara mengetahui alamat IP dari beberapa host yang somenamesaya bisa ssh? Jika saya lakukan nslookuppada host ini dikatakan "tidak ada jawaban". Bagaimana cara sshmengatasinya?


Baik penjelasan /etc/hostsmaupun .ssh/configpenjelasan tidak berhasil.


EDIT

Maaf somenamesepenuhnya memenuhi syarat.

ssh somename.somedomain

bekerja, sementara

ping somename.somedomain

dan

nslookup somename.somedomain

jangan

Dims
sumber
12
Apakah terdaftar di /etc/hostsatau ~/.ssh/config?
Stephen Kitt
1
Nama ini juga dapat diatasi menggunakan mDNS (Multicast DNS) atau LLMNR (Link-Local Multicast Name Resolution).
Johan Myréen
Ini mungkin memiliki entri dalam file .ssh / config Anda
Tagwint
1
@Dims Anda bisa mencoba ping somename.local. .localadalah domain khusus untuk mDNS. Untuk LLMNR Anda bisa menggunakan skrip NMAP ini .
Johan Myréen
2
@ mckenzm tidak, tidak akan.
Stephen Kitt

Jawaban:

31

Nslookup adalah program untuk menanyakan server nama domain Internet . Nslookup sangat baik untuk query server DNS tetapi tidak memberikan Anda gambaran keseluruhan ketika datang ke resolusi nama.

Di Linux, resolusi nama biasanya dikontrol oleh NSS yang dikonfigurasikan oleh /etc/nsswitch.conf. Secara khusus, konfigurasi ini berisi hostsentri. Sebagai contoh:

hosts:          files dns

Dalam entri di atas Anda dapat melihat bahwa hal pertama yang akan ditanyakan filesdiikuti oleh dns, artinya /etc/hostsakan ditanyakan sebelum DNS. Pilihan lain ada termasuk LDAP , DNS Multicast dan MENANG .

Menjawab pertanyaan Anda secara langsung, SSH menyelesaikan nama host ke alamat IP menggunakan NSS (menarik hasil dari berbagai sumber) di mana nslookup hanya menanyakan DNS.

Anda dapat memeriksa untuk melihat IP NSS mana yang menyelesaikan nama host untuk menggunakan getent. Misalnya untuk menyelesaikan somename:

getent hosts somename

Juga Dalam kasus SSH Anda dapat mengkonfigurasi informasi spesifik host di /etc/ssh/ssh_configdan ~/.ssh/config. Ini bahkan akan memungkinkan Anda menentukan alamat IP untuk nama host, sepenuhnya melewatkan resolusi nama .:

Berikut ini memberitahu SSH untuk digunakan 192.168.1.25untuk keduanya devdan dev.example.com. SSH akan menggunakan alamat ini apakah ada nama-nama ini atau tidak sebagai nama DNS untuk IP yang berbeda:

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25
Philip Couling
sumber
10

Bagaimana cara mengetahui alamat IP dari beberapa host yang somenamesaya bisa ssh?

Gunakan bendera verbose ( -v) dari sshperintah:

ssh somename -v

Outputnya harus mengandung, antara lain, garis yang menunjukkan IP diselesaikan dari server yang Anda hubungkan:

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

Jika saya melakukan nslookup pada host ini dikatakan "tidak ada jawaban". Bagaimana cara sshmengatasinya?

Penyebab paling mungkin sshuntuk dapat menyelesaikan nama host yang nslookuptidak bisa adalah bahwa itu dikonfigurasi di sshtingkat.

Per yang ssh_config(5)halaman buku panduan , ada tiga tempat di mana sshterlihat di file config:

  1. opsi baris perintah
  2. file konfigurasi pengguna (~ / .ssh / config)
  3. file konfigurasi seluruh sistem (/ etc / ssh / ssh_config)

Salah satu file ini mungkin berisi nama host Anda somename(atau pola yang cocok dengan itu) sebagai alias nama host atau IP lain. Sebagai contoh:

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

Silakan merujuk ke ssh_config(5)penjelasan Hostdan HostNamearahan halaman manual dan ke PATTERNSbagian untuk informasi lebih lanjut.

Jules Lamur
sumber
Jawaban ini tidak menjawab pertanyaan, yang merupakan bagaimana nama host dikenali, bahkan jika itu bukan server oleh server DNS.
Johan Myréen
1
Jawabannya dengan benar menyebutkan skenario yang sangat mungkin di mana ssh user@someservertampaknya "menyelesaikan" someservernama DNS (bahkan jika ini tidak benar-benar terjadi). Jika Host someserverdikonfigurasi dalam .ssh/configfile, maka mungkin untuk menggunakan perintah ssh persis seperti status OP bahkan jika someservertidak ada dalam DNS sama sekali.
Fiisch
2
@ JohanMyréen Keluaran dari ssh -v somenamemenyertakan alamat IP (terlepas dari ssh_configentri apa pun ). Jadi ia langsung menjawab pertanyaan "Bagaimana cara mengetahui alamat IP dari beberapa nama host yang dapat saya ssh?", Serta menjadi langkah pertama yang baik untuk menjawab "Bagaimana bisa bahwa somename ssh berfungsi ...?".
JigglyNaga
4

Philip hampir sampai, tetapi .ssh/configpergilah ke rathole yang tidak mungkin Anda konfigurasikan.

Perintah ...

getent hosts somename

... meminta NSS menggunakan hosts:garis pencarian dalam /etc/nsswitch.conf, bukan hanya DNS seperti nslookuphalnya. Kemungkinan lingkungan Unix Anda menggunakan lebih dari satu layanan penamaan; mungkin beberapa jenis integrasi AD.

Kaya
sumber
3
Saya tidak akan mengatakan saya menuju ke rute itu. Saya menambahkan "juga" untuk kelengkapan.
Philip Couling
@ PhilipCouling Tentu, tetapi "pra-juga" Anda tidak lengkap - Anda tidak menunjukkan cara menyelesaikan nama secara sewenang-wenang ketika pertanyaannya adalah tentang "$ thing versus nsloookup".
Kaya
3
Seperti yang sudah dikomentari tentang Q, hostbiasanya merupakan bagian dari bind-utils (atau yang setara) dan menyukai keduanya nslookupdan dighanya menggunakan DNS. OTOH getent hosts(atau mungkin ahosts) melakukan apa yang Anda gambarkan.
dave_thompson_085
@ dave_thompson_085 Salah. hostpertanyaan layanan nama lainnya. Setuju itu getent hostsadalah metode terbaik terbaik untuk menanyakan "setiap layanan nama yang dikonfigurasi".
Kaya
1
hostadalah DNS-only per halaman manual dan dikonfirmasi oleh pengujian pada sistem yang saya gunakan (CentOS, Ubuntu, FreeBSD, Solaris) serta upstream . Juga lihat (dekat) dupes saya mengomentari Q yang juga mengatakan ini.
dave_thompson_085