È possibile alias un nome host in Linux?


90

È possibile alias un nome host in Linux?

È stato chiesto da jmillikin in vari forum di Ubuntu come segue:


È possibile creare un alias hostname? Sorta di like / etc / hosts, ma con altri nomi host anziché indirizzi IP. In modo che con alcuni file come questo, è possibile eseguire il ping di "fakehost1", che verrà mappato nuovamente su "realhost" e quindi "realhost" verrà risolto in un indirizzo IP.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Qualcuno ha risposto su ssh, ma non sul ping, ecc. Il mio scopo principale è quello di usarlo come alias per un server Subversion . Nel mio caso, realhost ha un indirizzo IP dinamico. Quindi, l'alias "/ etc / hosts" non funziona. Voglio accedere al mio server Subversion come svn://my_svnserver/my_reposanziché svn://realhost/my_repos.


Immagino che mi manchi qualcosa. Stai dicendo che non potresti avere / etc / hosts come 10.0.3.4 some.host.org another.domain.com Devi usare un riferimento per qualche motivo programmatico?
jim_m_somewhere

Risposte:


56

Per coloro che non hanno un account nei forum (o non desiderano accedere):

se il tuo problema principale non è il ping ma quello di ssh, puoi creare / modificare il tuo ~ / .ssh / config aggiungendo linee come queste:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
La parte Nome host deve trovarsi su una nuova riga. Ecco un buon tutorial su come creare un file di configurazione come questo: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander

1
buona soluzione, grazie. Ma naturalmente, la soluzione migliore sarebbe quella di usare i nomi su DNS
Yura,

31

Linux supporta l'aliasing impostando la variabile env HOSTALIASES.

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

allora puoi

ping fakehost

NB ping richiede di configurarlo come root, ma puoi farlo come qualsiasi utente per qualsiasi applicazione che gira come quell'utente. il ping va su root.


3
non ha funzionato per me su Ubuntu 12.04 :(
Dimitry K

3
Gli HOSTALIASES funzionano solo per eseguibili che non hanno il flag setuid impostato. Quindi non funzionerà per il ping (a meno che tu non sia già root quando esegui il ping). Immagino che ciò venga fatto per evitare di indurre gli eseguibili setuid a collegarsi a un host diverso da quello che intendeva.
Boris,

1
Inoltre non funziona per il ricciolo
Benubird,

7
raramente finirà nel risultato atteso. HOSTALIASES funziona solo per applicazioni che utilizzano getaddrinfo (3) o gethostbyname (3) - Ciò significa che funzionerà per le applicazioni che cercano di risolvere esplicitamente il nome host con una specifica chiamata di sistema: non è mai il caso. vedi unix.stackexchange.com/questions/10438/… quindi l'unica soluzione è dns locale (dnsmasq)
Nadir,

1
Sembra che questo trucco sia deprecato. Le funzioni gethostbyname * (), gethostbyaddr * (), herror () e hstrerror () sono obsolete. Se il tuo sistema esegue DNSMasq localmente, puoi farlo alias per qualsiasi risoluzione che utilizza DNS.
Teknopaul,

24

Puoi configurarlo sul tuo server DNS, i record CNAME consentono a una macchina di essere conosciuta da più di un nome host. Quindi aggiungi i record CNAME al tuo server DNS in questo modo:


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


3
sarebbe un server DNS leggero da provare dnsmasq(serve anche DHCP).
sybreon,

17

Lo faccio spesso con variabili d'ambiente. So che questo funziona solo per la riga di comando, ma è dove sto spesso desiderando gli alias hostname (ho lavorato con diversi account di supercomputer, tutti con URL lunghi). Ecco un esempio, se stai usando BASH. In ~ / .bashrc:

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

quindi, in una shell fresca:

ssh christopher @ $ fakehost


11

L'unico modo per farlo è se si dispone del proprio server DNS locale.


1
Sì, ora sembra l'unica soluzione. Grazie. Non posso votare perché non ho abbastanza reputazione.

Se il problema riguarda l'indirizzo IP in continua evoluzione di una connessione DSL o dialup, dyndns è una soluzione migliore, IMHO.
Sven

No, non è una soluzione migliore. Una volta che il server ha un nome host che viene gestito da qualcos'altro, tutto ciò che serve all'OP è un CNAME per il primo nome host. DYNDNS e simili si basano sull'host che informa il server DNS che il suo IP è cambiato.
theotherreceive,

5

L'uso di /etc/hosts.aliases è una funzione standard delle librerie del risolutore di bind. È più robusto dell'aggiunta di voci a / etc / hosts e può essere usato se non puoi aggiungere CNAMES al tuo DNS (non hai accesso ad esso).

In generale, è consigliabile utilizzare CNAMES nel DNS con la RICERCA appropriata definita in /etc/resolv.conf.

L'aggiornamento / etc / hosts non è molto solido poiché le voci devono essere sincronizzate con le modifiche dell'IP. Funziona davvero solo su piccola scala o quando si utilizza un servizio di nomi per distribuire la mappa degli host (ad es. Tramite ldap).

Un'altra soluzione potrebbe essere DNSMasq http://en.wikipedia.org/wiki/Dnsmasq


Ho provato a usare /etc/hosts.aliases in CENTOS 6 ma questa funzione non sembra funzionare. Né posso trovare alcuna documentazione sul suo utilizzo o esistenza. Dove dovrei cercare?
mdpc,

5

Avrai bisogno di un server dyndns che mapperà il tuo attuale indirizzo IP su un nome host. Indica a questo server il tuo attuale indirizzo IP ogni volta che accedi e aggiornerà il tuo record del nome host.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.