Mengapa SSH tidak menyelesaikan nama host ini?

12

Ketika saya mencoba SSH ke host di jaringan bernama storage, saya mendapatkan kegagalan resolusi DNS:

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

Tetapi ketika saya menanyakan DNS dengan host, ia berfungsi

$ host storage
storage has address 192.168.20.103

Bagaimana hostbisa menemukan IP tetapi sshtidak bisa?

jldugger
sumber
14
Mulai biasakan menggunakan FQDN di mana-mana. Jika ini adalah masalah pertama yang Anda alami, Anda sangat beruntung. Ini bisa sangat berbulu untuk dilacak, dan itu tidak akan menjadi yang terakhir. Berikut ini petunjuknya: storageadalah domain tingkat atas langsung di Internet.
Michael Hampton
Apakah Anda dapat 'ssh' ke 192.168.20.103?
IvanGoneKrazy
2
Di mana Anda menentukan nama host 192.168.20.103? / etc / hosts?
Anak yatim
3
Mengetik FQDN itu menyebalkan. Mengasingkan "penyimpanan" ke "storage.mydomain.com" di .ssh / config, di sisi lain, sangat berguna.
pjc50
1
@ pjc50 Saya mengetik stodan kemudian tekan Tab.
Michael Hampton

Jawaban:

28

sshdan hostmenyelesaikan nama-nama mengikuti jalur yang sama sekali berbeda, sehingga tidak mengherankan bahwa mereka kadang-kadang menghasilkan hasil yang berbeda, terutama ketika nama untuk menyelesaikan bukan FQDN (maka saran untuk menggunakan FQDN di mana-mana.)

Anda tidak menyebutkan apa pun tentang OS dan konfigurasi sistem Anda, jadi saya harus menjaganya agar tetap umum, dengan memperhatikan Linux: Rincian MacOS agak berbeda, dan Windows bahkan lebih, tetapi konsep umumnya sama.

  • hostkueri DNS, jadi pada dasarnya ia mencari /etc/resolv.confdan menanyakan server yang terdaftar di sana, mungkin melampirkan nama domain jika nama host belum sepenuhnya memenuhi syarat. Ini mengabaikan setiap sumber lain yang mungkin, tetapi berhati-hatilah bahwa hari ini banyak sistem menjalankan server DNS caching lokal (biasanya dnsmasq) yang membaca /etc/hostsdan sumber-sumber lain sebelum menanyakan server DNS lain, jadi jika hostmenanyakan server lokal itu, hasil dari /etc/hostsdapat merangkak masuk.

  • sshmengikuti jalannya sendiri. Saya akan menjelaskan apa yang opensshada di Linux, implementasi lainnya berbeda. Pertama ia mencari nama panggilan host yang didefinisikan dalam file config (sistem-lebar /etc/ssh/ssh_configdan per-pengguna ~/.ssh/config), kemudian mencari sumber lain dalam urutan yang ditentukan oleh hosts:arahan dalam /etc/nsswitch.conf. Katakan itu sesuatu seperti:

    hosts: files dns
    

    ini berarti: lihat /etc/hostslalu minta DNS ( /etc/resolv.conflagi). Sumber lain yang mungkin adalah usang nisdan netinfolayanan, LDAP, direktori aktif, sebut saja mereka.

Untuk men-debug kasus khusus Anda, Anda harus mengikuti jalur implementasi yang sshdiikuti dan mencari tahu di mana ia terjebak.

Dario
sumber
6
ltrace / strace dapat memberi Anda petunjuk tentang bagaimana ssh benar-benar mencoba menyelesaikan domain ... dan yang paling dekat-dengan-bagaimana-os-melakukannya, alat command line dns mungkin sedang dijalankan.
rackandboneman
Rekomendasi Anda untuk berubah /etc/nsswitch.confmenjadi membaca bermanfaat hosts: files dnsuntuk saya. Sama seperti catatan tambahan yang menarik, saya telah menyiapkan beberapa Raspberry Pis dengan Raspian Jessie beberapa minggu terakhir, dan mereka semua membutuhkan perubahan ini.
Patrick Tucci