Bagaimana cara ssh ke server secara internal dengan nama host tanpa nama domain?

10

Saya perlu masuk ke beberapa server di tempat kerja untuk menyelesaikan pekerjaan saya. Saya bosan mengetik FQDN server untuk diakses. Saya masuk / keluar melalui ssh di jaringan pribadi kami. Saya 99% yakin itu di jaringan pribadi kita sendiri b / c semua server memiliki ip addr 10.xyz Apakah ada cara untuk ssh ke server hanya dengan nama host dan bukan nama domain?

Kami memiliki server di banyak negara. Cara server kami dinamai sangat panjang. Dinamai sebagai berikut:

hostname.country.domainname.com

Saya sedang mengetik carpal tunnel ssh [email protected]

... setiap kali saya mengakses salah satu server kami. Jika saya di AS dan saya mencoba mengakses host lain yang ada di AS, saya cukup mengetik ssh me@hostname2dan saya terhubung dengan baik. Namun, jika saya di AS dan mencoba terhubung ke server di Inggris, saya tidak dapat mengetik ssh [email protected]dan terhubung hostname3.

Solusi yang saya lakukan adalah menyiapkan alias di file ~ / .ssh / config saya untuk beberapa server. Namun, saya pikir tidak mungkin menambahkan 1000+ server ke dalam file itu. Saya sudah menambahkan 20+ server dan rekan kerja saya berpikir saya gila, meskipun saya pikir mereka gila karena mengetik FQDN saat menyanyi.

Apakah ada cara mudah bagi kami untuk mengatur sesuatu sehingga kami tidak perlu mengetikkan domainname.com setiap kali?

Rahasia
sumber

Jawaban:

18

Anda dapat wildcard dan digunakan %hdi konfigurasi Anda

misalnya

Host *.eng
  Hostname %h.domainname.com

Sekarang ketika Anda melakukannya ssh foo.engakan mencoba terhubung foo.eng.domainname.com.

Anda dapat menambahkan opsi lain ke konfigurasi ini juga; misalnya memaksakan nama pengguna

Host *.eng
  Hostname %h.domainname.com
  User me

Sekarang ketika Anda melakukannya ssh foo.engakan mencoba terhubung ke foo.eng.domainname.comsebagai pengguna me.

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(yah, jelas saya mendapatkan kesalahan sebelum itu bukan nama host yang valid untuk saya!)

Jadi sekarang Anda hanya perlu satu aturan per negara.

Stephen Harris
sumber
Pikiran pertama saya adalah alias DNS, yang kedua adalah file hosts, tetapi saya melewatkan beberapa server. Solusi ini terlihat sangat bagus. Konfigurasi apa yang mendapat baris yang Anda poskan?
Xalorous
Ini masuk ke dalam $HOME/.ssh/configatau Anda dapat membuatnya dalam sistem luas/etc/ssh/ssh_config
Stephen Harris
Apakah ini berhasil user@*.eng?
Xalorous
3
Dengan aturan yang saya tulis Anda bisa melakukannya ssh [email protected]dan itu akan berfungsi seperti yang diharapkan. Yang dilakukan adalah menulis ulang komponen hostname. Bahkan akan bekerja dengan scpdan sftpdan sebagainya.
Stephen Harris
9

Jika Anda menambahkan

search domainname.com

untuk /etc/resolv.conf, dan menggunakan hostname.country, ssh(dan program jaringan lainnya, dalam hal ini) akan secara otomatis menambahkan domainname.comuntuk Anda 1 .

Saya tidak berpikir menambahkan domain negara yang berbeda ke searchjalur Anda adalah ide yang baik karena Anda mungkin mendapatkan perilaku yang tidak terduga jika dua server di dua negara berbeda memiliki nama host yang sama 2

Saya percaya metode ini lebih baik daripada mengubah sshkonfigurasi karena ini memungkinkan hostname.countryuntuk menyelesaikan terlepas dari program yang Anda gunakan ( telnet, VNC, ...).

Lihat resolv.conf(5)


1 Lebih akurat, itu akan ditambahkan domainname.comjika itu tidak bisa diselesaikan hostname.countrydengan sendirinya.

2 Dalam skenario seperti itu hostnameakan menyelesaikan ke server di negara yang domainnya terdaftar pertama kali di searchjalur.

Joseph R.
sumber
2
BTW Anda juga dapat melakukan ini sebagai non-root dan per proses dengan variabel LOCALDOMAIN. man resolv.conf
rudimeier
Ini berfungsi untuk menyelesaikan host SSH, tetapi jika Anda menggunakan GSS / Kerberos nama tidak cocok dan authing akan gagal.
Nick T
7

Anda bisa menggunakan CanonicalDomainsopsi di ssh config Anda.

Menambahkan berikut ini ke file konfigurasi ssh Anda akan membuat ssh mencoba menambahkan domainname.comke host apa pun yang memiliki paling banyak 1 titik dalam namanya:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Dengan konfigurasi ssh foo.engini pertama kali akan mencoba foo.eng.domainname.com, dan mundur ke foo.engjika tuan rumah tidak dapat ditemukan. Demikian juga, ssh github.compertama-tama akan mencoba github.com.domainname.com, jadi jika Anda ingin terhubung ke GitHub, server DNS Anda tidak boleh mengembalikan catatan untuk host yang tidak ada.

The CanonicalizeMaxDotsdapat digunakan untuk mengontrol berapa banyak titik-titik dapat muncul dalam nama host sebelum ssh menganggap itu memenuhi syarat dan tidak append domainname.com. standarnya adalah 1 yang seharusnya cukup untuk Anda mengingat skema yang Anda miliki saat ini, tetapi jika Anda pernah mendapatkan sesuatu seperti hostname.city.countryAnda perlu meningkatkannya.

pengguna2313067
sumber