Apakah mungkin alias nama host di Linux?

90

Apakah mungkin alias nama host di Linux?

Ini telah diminta oleh jmillikin di berbagai forum Ubuntu sebagai berikut:


Apakah mungkin membuat alias hostname? Agak seperti / etc / hosts, tetapi dengan nama host lain daripada alamat IP. Sehingga dengan beberapa file seperti ini, Anda bisa melakukan ping "fakehost1", dan itu akan dipetakan kembali ke "realhost", dan kemudian "realhost" akan diselesaikan ke alamat IP.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Seseorang telah menjawab tentang ssh, tetapi bukan tentang ping, dll. Tujuan utama saya adalah menggunakannya sebagai alias untuk server Subversion . Dalam kasus saya, realhost berada di bawah alamat IP dinamis. Jadi, alias "/ etc / hosts" tidak berfungsi. Saya ingin mengakses server Subversion saya sebagai svn://my_svnserver/my_reposganti svn://realhost/my_repos.

Peter Mortensen
sumber
Saya kira saya mungkin kehilangan sesuatu. Apakah Anda mengatakan bahwa Anda tidak dapat memiliki / etc / hosts seperti 10.0.3.4 some.host.org another.domain.com Anda harus menggunakan referensi untuk beberapa alasan terprogram?
jim_m_somewhere

Jawaban:

56

Bagi mereka yang tidak memiliki akun di forum (atau tidak ingin masuk):

jika masalah utama Anda bukan untuk melakukan ping tetapi untuk ssh, Anda dapat membuat / mengedit baris tambahan ~ / .ssh / config Anda seperti ini:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3
Xiong Chiamiov
sumber
1
Bagian Hostname harus berada di baris baru. Berikut ini adalah tutorial yang bagus tentang cara membuat file konfigurasi seperti ini: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander
1
solusi yang baik, terima kasih. Tapi tentu saja, solusi yang lebih baik adalah menggunakan cnames pada dns
Yura
31

Linux mendukung alias dengan mengatur variabel HOSTALIASES env.

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile

maka kamu bisa

ping fakehost

NB ping mengharuskan Anda mengatur ini sebagai root, tetapi Anda bisa melakukannya sebagai pengguna apa pun untuk aplikasi apa pun yang berjalan sebagai pengguna itu. ping suids untuk root.

teknopaul
sumber
3
tidak bekerja untuk saya di Ubuntu 12.04 :(
Dimitry K
3
HOSTALIASES hanya berfungsi untuk executable yang tidak memiliki set flag setuid. Jadi itu tidak akan berfungsi untuk ping (kecuali Anda sudah root ketika menjalankan ping). Saya kira ini dilakukan untuk menghindari menipu setuid-executable agar terhubung ke host yang berbeda dari yang diinginkan.
Boris
1
Juga tidak berfungsi untuk curl
Benubird
7
itu jarang akan berakhir pada hasil yang diharapkan. HOSTALIASES hanya berfungsi untuk aplikasi yang menggunakan getaddrinfo (3) atau gethostbyname (3) - Ini berarti bahwa itu akan bekerja untuk aplikasi yang mencoba secara eksplisit menyelesaikan nama host dengan panggilan sistem tertentu: Tidak pernah demikian. lihat unix.stackexchange.com/questions/10438/... jadi satu-satunya solusi adalah dns lokal (dnsmasq)
Nadir
1
Sepertinya trik ini sudah usang. Fungsi gethostbyname * (), gethostbyaddr * (), herror (), dan hstrerror () sudah usang. Jika sistem Anda menjalankan DNSMasq secara lokal, Anda dapat menggunakan alias untuk resolusi apa pun yang menggunakan DNS.
teknopaul
24

Anda dapat mengatur ini di server DNS Anda, catatan CNAME memungkinkan mesin diketahui oleh lebih dari satu nama host. Jadi tambahkan catatan CNAME ke server DNS Anda seperti itu:


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 

Ali Mezgani
sumber
3
server DNS yang ringan untuk dicoba dnsmasq(juga melayani DHCP).
sybreon
17

Saya sering melakukan ini dengan variabel lingkungan. Saya tahu ini hanya berfungsi untuk baris perintah, tetapi di sinilah saya paling sering menginginkan alias hostname (saya bekerja dengan beberapa akun komputer super, semuanya dengan URL yang panjang). Ini sebuah contoh, jika Anda menggunakan BASH. Di ~ / .bashrc:

export fakehost = "long.ass.annoying.url.org"

lalu, di shell baru:

ssh christopher @ $ fakehost


sumber
11

Satu-satunya cara ini dapat dilakukan adalah jika Anda memiliki server dns lokal Anda sendiri.

theecereceive
sumber
1
Ya, sekarang sepertinya ini satu-satunya solusi. Terima kasih. Tidak dapat memilih karena saya tidak memiliki reputasi yang cukup.
Jika alamat IP yang selalu berubah dari koneksi DSL atau dialup adalah masalahnya, dyndns adalah solusi yang lebih baik, IMHO.
Sven
Tidak, ini bukan solusi yang lebih baik. Setelah server memiliki nama host yang ditangani oleh sesuatu yang lain, maka semua kebutuhan OP adalah CNAME untuk nama host pertama. DYNDNS dan yang serupa bergantung pada host yang menginformasikan server dns bahwa ip telah berubah.
theotherreceive
5

Penggunaan /etc/hosts.aliases adalah fitur standar dari perpustakaan resolver bind. Ini lebih kuat daripada menambahkan entri ke / etc / hosts dan dapat digunakan jika Anda tidak dapat menambahkan CNAMES ke DNS Anda (tidak memiliki akses ke sana).

Secara umum praktik terbaik adalah menggunakan CNAMES dalam DNS dengan SEARCH yang sesuai didefinisikan di /etc/resolv.conf.

Memperbarui / etc / hosts tidak terlalu tangguh karena entri harus tetap sinkron dengan perubahan IP. Ini hanya benar-benar berfungsi dalam skala kecil atau ketika Anda menggunakan layanan nama untuk mendistribusikan peta host (mis. Via ldap).

Solusi lain mungkin DNSMasq http://en.wikipedia.org/wiki/Dnsmasq

Tom Hallam
sumber
Saya mencoba menggunakan /etc/hosts.aliases di CENTOS 6 tetapi fitur ini sepertinya tidak berfungsi. Saya juga tidak dapat menemukan dokumentasi tentang penggunaan atau keberadaannya. Di mana saya harus mencari?
mdpc
5

Anda akan memerlukan server dyndns yang akan memetakan alamat IP Anda saat ini ke nama host. Anda akan memberi tahu server ini tentang alamat IP Anda saat ini setiap kali Anda masuk, dan itu akan memperbarui catatan nama host Anda.

Sven
sumber