Bisakah saya mengonfigurasi ubuntu untuk menambahkan domain ke akhir permintaan nama host ssh?

9

Saya memiliki banyak server dan semuanya berakhir dengan servers.company.net yang sama, jadi misalnya vded-xx-001.servers.company.net, dan bertanya-tanya apakah mungkin untuk membuatnya sehingga saya bisa mengetikkan vded- xx-001 dan sudah menambahkan server.company.net secara otomatis?

Jadi saya ingin mengetik

ssh user@vded-xx-001

dan memilikinya benar-benar terhubung

ssh [email protected]

Saya telah mencoba mengatur domain pencarian DNS saya ke servers.company.net, di / etc / network / interfaces, tetapi ini tidak mencapai hasil yang diinginkan.

Adakah yang bisa mengarahkan saya ke arah yang benar?

Terima kasih sebelumnya

Tim Lassie Freeborn
sumber
Apakah ada alasan Anda tidak bisa menambahkan search company.netke /etc/resolv.conf?
Hennes
@ Henry Menambahkan pencarian company.net dan servers.company.net ke resolv.conf telah berfungsi. Namun ada peringatan di bagian atas file bahwa perubahan saya akan ditimpa, jika ini masalahnya bagaimana saya membuatnya permanen?
Tim Lassie Freeborn
1
Saya akan senang menjawabnya dan mendapatkan rep tambahan, tetapi posting ini sudah menjawab dengan cukup baik: :-) askubuntu.com/questions/157154/…
Hennes
Sebenarnya, bertentangan dengan apa yang dibahas dalam pertanyaan itu, biasanya yang terbaik adalah memasukkan daftar domain pencarian baik dalam /etc/network/interfaces(menggunakan dns-searchopsi) atau dalam bidang konfigurasi koneksi NetworkManager Search domains.
jdthood
Daripada mengacaukan konfigurasi resolver lokal, solusi ini lebih sederhana, dan portabel.
OrangeDog

Jawaban:

19

Mungkin Anda sudah menyelesaikan ini, tetapi mungkin nanti bisa membantu seseorang: Anda tidak perlu bertemu dengan resolv.conf Anda, cukup gunakan sesuatu seperti ini di ~ / .ssh / config Anda:

Host vded-*-001 test-*-something-fixed-*
        HostName %h.servers.company.net
        User someusername

Jadi nanti Anda bisa menggunakan:

ssh vdev-alotofstuff-001
ssh vdev-somethingels-001
ssh test-02-something-fixed-somethingelse

Salam,

Mauricio
sumber
Ini harus menjadi jawaban yang diterima.
slm
Ini adalah cara untuk memecahkan masalah, tetapi tidak menyelesaikan masalah resolusi nama sistem, itu hanya memecahkan masalah untuk nama host ssh. Praktik terbaik bagi saya adalah untuk bisa mendapatkan hostname sistem yang tepat dan tidak harus menyesuaikan layanan tertentu (ssh) untuk dapat menyelesaikan nama host tertentu
Philippe Gachoud
1
Untuk berjaga-jaga jika saya lupa dan mencari ini lagi nanti, jika Anda ingin mengizinkan nama pendek dan panjang sambil berbagi konfigurasi yang sama, cukup tentukan entri pertama Host vded-*.servers.company.net, dengan Hostname %h. Kemudian dalam entri ke-2 Host vded-*dengan Hostname %h.servers.company.netdan semua
param
6

Ini solusi termudah. Ini bekerja untuk semua host, tidak memerlukan root atau akses ke sistem DNS / resolver.

Tambahkan ke bagian atas ~/.ssh/configfile Anda (atau buat jika belum ada):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

Dokumentasi ( man 5 ssh_config):

CanonicalizeHostname

Mengontrol apakah kanonikisasi nama host eksplisit dilakukan. Defaultnya, tidak , adalah tidak melakukan penulisan ulang nama apa pun dan biarkan pemecah masalah sistem menangani semua pencarian nama host. Jika set ke yes kemudian, untuk koneksi yang tidak menggunakan ProxyCommand , ssh akan mencoba canonicalize nama host ditentukan pada baris perintah dengan menggunakan CanonicalDomains akhiran dan CanonicalizePermittedCNAMEs aturan. Jika CanonicalizeHostname diatur ke selalu , maka kanonikisasi juga diterapkan pada koneksi yang diproksi.

Jika opsi ini diaktifkan, maka file-file konfigurasi diproses lagi menggunakan nama target baru untuk mengambil konfigurasi baru apa pun dalam bait Host dan Match yang cocok .

OrangeDog
sumber
Ini bekerja paling baik untuk saya. Anda tidak perlu menambahkan CanonicalDomains, cukup baris ke-1. Cara ini berfungsi meskipun Anda terhubung ke jaringan lain.
Adam Wallner
2
@AdamWallner jika Anda tidak menambahkannya CanonicalDomainsmaka itu hanya akan berfungsi pada domain pencarian jaringan saat ini. Jika Anda melakukannya (dan Anda dapat membuat banyak daftar) maka itu akan berfungsi untuk menyelesaikan semua nama host tersebut, pada jaringan apa pun yang mungkin Anda sambungkan.
OrangeDog
2

Ya, Anda bisa melakukan ini dengan membuat file config bernama ~/.ssh/configdan memasukkan konten berikut:

Host vded-xx-001
User user
Port 22
HostName vded-xx-001.servers.company.net

Sekarang Anda cukup mengetik ini (Anda bahkan tidak perlu nama pengguna lagi):

$ ssh vded-xx-001

Ini juga berfungsi dengan utilitas baris perintah scp:

$ scp filename vded-xx-001:/path/
Flimm
sumber
Saya menyadari bahwa ini berfungsi untuk host individu tetapi saya memiliki ratusan dan berharap saya dapat membuat aturan yang mengambil pada VDED- * dan kemudian untuk nama host tidak host.servers.company.net
Tim Lassie Freeborn
1
@TimLassieFreeborn: Anda bisa menulis skrip yang menghasilkan entri yang diperlukan untuk file konfigurasi. Saya tidak tahu apakah Anda bisa melakukannya secara dinamis.
Flimm
@TimLassieFreeborn lihat jawaban saya
OrangeDog
2

Solusi untuk masalah saya adalah menambahkan domain pencarian ke resolv.conf:

search servers.company.net

Ini memungkinkan saya untuk masuk

ssh user@vded-xx-001

untuk salah satu server saya dan terhubung ke alamat yang benar.

Terima kasih @Hennes atas jawabannya

Tim Lassie Freeborn
sumber
2
Dengan asumsi Anda menjalankan Ubuntu 12.04 atau lebih baru, Anda tidak boleh mengedit /etc/resolv.conf secara langsung karena utilitas resolvconf menghasilkan file itu. (Sebenarnya ia menghasilkan /run/resolvconf/resolv.conf yang mana /etc/resolv.conf adalah tautan simbolik.) Sebagai gantinya, Anda harus mengonfigurasi pengaturan DNS melalui pengonfigurasi antarmuka, baik ifup atau NetworkManager. Ifup : Edit / etc / network / interfaces dan tambahkan dns-search servers.company.netbaris ke bait untuk antarmuka jaringan eksternal mesin. NM : Tambahkan servers.company.netke Search domainsbidang pada tab IPv4 untuk koneksi.
jdthood
Jika /etc/resolv.confbukan tautan simbolik ../run/resolvconf/resolv.confpada mesin Anda, jalankan sudo dpkg-reconfigure resolvconfuntuk mengembalikan tautan simbolik.
jdthood
1

Jika Anda menggunakan identitas SSH - dan dengan banyak server itu layak dilihat - maka seperti yang dikatakan OrangeDog pengaturan CanonicaliseHostname dan CanonicaliseDomains juga akan memungkinkan kecocokan untuk entri @ cert-authority di host yang dikenal Anda

entri diketahui_hosts @ cert-otoritas * .example.com ssh-rsa AAAddadfkjaeio ...

tanpa opsi Canonicalise, Anda harus menggunakan "ssh host.example.com"

Dengan opsi Canonicalise "ssh myhost" akan cocok.

Saya telah menambahkan ini sebagai komentar untuk jawaban OrangeDogs jika perwakilan diizinkan ...

Richard N
sumber
0

Untuk solusi cepat yang berfungsi di berbagai program, Anda juga dapat mengatur domain vded-xx-001untuk mengalihkan ke alamat IP tertentu, dengan mengedit /etc/hostsuntuk menyertakan baris seperti ini:

173.194.41.90  vded-xx-001

Ini berfungsi di browser Anda: http://vded-xx-001/

Seperti halnya dengan utilitas baris perintah seperti SSH:

$ ssh user@vded-xx-001

(Saya pribadi lebih suka solusi konfigurasi SSH .)

Flimm
sumber
0

Untuk resolusi nama domain sistem-lebar, saya suka mengatur hal-hal satu kali di jaringan saya. Jadi saya akan menetapkan di DHCP Server nama domain dan DNS Server sehingga memberikan semua mesin hak resolv.conftermasuk

  • IP Server DNS Primer
  • Domain
  • arahan pencarian

Ini tergantung pada DHCP Server dan konfigurasi jaringan yang Anda inginkan ... Saya pribadi tidak suka konfigurasi khusus mesin ketika itu sesuatu yang umum untuk jaringan

Philippe Gachoud
sumber