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?


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.