Ist es möglich, einen Hostnamen unter Linux zu aliasen?


90

Ist es möglich, einen Hostnamen unter Linux zu aliasen?

Es wurde von jmillikin in verschiedenen Ubuntu-Foren wie folgt gefragt:


Ist es möglich, einen Hostnamen-Alias ​​zu erstellen? So ähnlich wie / etc / hosts, aber mit anderen Hostnamen anstelle von IP-Adressen. Mit einer solchen Datei könnten Sie "fakehost1" anpingen, und es würde "realhost" neu zugeordnet, und dann würde "realhost" in eine IP-Adresse aufgelöst.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

Jemand hat über ssh geantwortet, aber nicht über Ping usw. Mein Hauptzweck ist es, es als Alias ​​für einen Subversion- Server zu verwenden. In meinem Fall befindet sich realhost unter einer dynamischen IP-Adresse. Der Alias ​​"/ etc / hosts" funktioniert also nicht. Ich möchte meine Subversion - Server zugreifen , als svn://my_svnserver/my_reposstatt svn://realhost/my_repos.


Ich vermute, ich vermisse etwas. Wollen Sie damit sagen, dass / etc / hosts nicht wie in 10.0.3.4 aussehen kann? Some.host.org another.domain.com Sie müssen aus programmatischen Gründen eine Referenz verwenden?
jim_m_somewhere

Antworten:


56

Für diejenigen, die kein Konto in den Foren haben (oder sich nicht anmelden möchten):

Wenn Ihr Hauptproblem nicht Ping, sondern SSH ist, können Sie Ihre ~ / .ssh / config erstellen / bearbeiten und Zeilen wie diese hinzufügen:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
Der Hostname muss in einer neuen Zeile stehen. Hier ist ein gutes Tutorial, wie man eine Konfigurationsdatei wie diese erstellt: mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander

1
Gute Umgehung, danke. Aber die bessere Lösung wäre natürlich, cnames für dns zu verwenden
Yura

31

Linux unterstützt Aliasing, indem es die Variable HOSTALIASES env setzt.

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

dann kannst du

ping fakehost

NB Ping erfordert, dass Sie dies als root einrichten, aber Sie können es als jeder Benutzer für jede Anwendung tun, die als dieser Benutzer ausgeführt wird. ping suids to root.


3
hat auf Ubuntu 12.04 nicht funktioniert :(
Dimitry K

3
Die HOSTALIASES funktionieren nur für ausführbare Dateien, für die das Flag setuid nicht gesetzt ist. Es funktioniert also nicht für Ping (es sei denn, Sie sind bereits root, wenn Sie Ping ausführen). Ich denke, dies wird getan, um zu vermeiden, dass setuid-executables dazu verleitet werden, eine Verbindung zu einem anderen Host herzustellen, als beabsichtigt.
Boris

1
Funktioniert auch nicht für Curl
Benubird

7
es wird selten im erwarteten Ergebnis enden. HOSTALIASES funktioniert nur für Anwendungen, die getaddrinfo (3) oder gethostbyname (3) verwenden. Dies bedeutet, dass es für Anwendungen funktioniert, die versuchen, den Hostnamen durch einen bestimmten Systemaufruf explizit aufzulösen. Dies ist niemals der Fall. Siehe unix.stackexchange.com/questions/10438/…, also ist die einzige Lösung lokales DNS (dnsmasq)
Nadir

1
Dieser Trick scheint veraltet zu sein. Die Funktionen gethostbyname * (), gethostbyaddr * (), herror () und hstrerror () sind veraltet. Wenn auf Ihrem System DNSMasq lokal ausgeführt wird, können Sie darin einen Alias ​​für jede Auflösung erstellen, die DNS verwendet.
Teknopaul

24

Sie können dies auf Ihrem DNS-Server einrichten. CNAME-Einträge ermöglichen, dass ein Computer unter mehr als einem Hostnamen bekannt ist. So fügen Sie Ihrem DNS-Server CNAME-Einträge hinzu:


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


3
Ein leichter DNS-Server zum Ausprobieren wäre dnsmasq(er dient auch DHCP).
Sybreon

17

Ich mache das oft mit Umgebungsvariablen. Ich weiß, dass dies nur für die Befehlszeile funktioniert, aber hier sehne ich mich am häufigsten nach Hostnamen-Aliasnamen (ich habe mit mehreren Supercomputer-Konten gearbeitet, alle mit langen URLs). Hier ist ein Beispiel, wenn Sie BASH verwenden. In ~ / .bashrc:

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

dann in einer frischen Schale:

ssh christopher @ $ fakehost


11

Dies ist nur möglich, wenn Sie einen eigenen lokalen DNS-Server haben.


1
Ja, jetzt scheint es die einzige Lösung zu sein. Vielen Dank. Kann nicht upvoten, da ich nicht genug Reputation habe.

Wenn die sich ständig ändernde IP-Adresse einer DSL- oder DFÜ-Verbindung das Problem ist, ist dyndns meiner Meinung nach die bessere Lösung.
Sven

Nein, es ist keine bessere Lösung. Sobald der Server einen Hostnamen hat, der von etwas anderem gehandhabt wird, ist alles, was das OP benötigt, ein CNAME für den ersten Hostnamen. DYNDNS und ähnliches hängt davon ab, dass der Host den DNS-Server darüber informiert, dass sich seine IP geändert hat.
theotherreceive

5

Die Verwendung von /etc/hosts.aliases ist eine Standardfunktion der Bind-Resolver-Bibliotheken. Es ist robuster als das Hinzufügen von Einträgen zu / etc / hosts und kann verwendet werden, wenn Sie Ihrem DNS keine CNAMES hinzufügen können (Sie haben keinen Zugriff darauf).

Im Allgemeinen empfiehlt es sich, CNAMES im DNS mit der entsprechenden in /etc/resolv.conf definierten Suche zu verwenden.

Das Aktualisieren von / etc / hosts ist nicht sehr robust, da die Einträge mit den IP-Änderungen synchron gehalten werden müssen. Dies funktioniert nur im kleinen Maßstab oder wenn Sie einen Namensdienst zum Verteilen der Hosts-Map verwenden (z. B. über LDAP).

Eine andere Lösung könnte DNSMasq http://en.wikipedia.org/wiki/Dnsmasq sein


Ich habe versucht, /etc/hosts.aliases in CENTOS 6 zu verwenden, aber diese Funktion scheint nicht zu funktionieren. Ich kann auch keine Dokumentation zu dessen Verwendung oder Existenz finden. Wo soll ich suchen?
mdpc

5

Sie benötigen einen dyndns-Server, der Ihre aktuelle IP-Adresse einem Hostnamen zuordnet. Sie werden diesem Server bei jeder Anmeldung Ihre aktuelle IP-Adresse mitteilen und Ihren Hostnamensdatensatz aktualisieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.