在Linux中可以为主机名加上别名吗?


89

在Linux中可以为主机名加上别名吗?

jmillikin在各种Ubuntu论坛上都提出了以下要求:


是否可以创建主机名别名?类似于/ etc / hosts,但使用其他主机名而不是IP地址。这样,使用这样的文件,您可以ping“ fakehost1”,并将其重新映射到“ realhost”,然后将“ realhost”解析为IP地址。

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

有人回答了有关ssh的问题,但没有回答有关ping等的问题。我的主要目的是将其用作Subversion服务器的别名。就我而言,realhost位于动态IP地址下。因此,“ / etc / hosts”别名不起作用。我想以svn://my_svnserver/my_repos而不是 访问我的Subversion服务器svn://realhost/my_repos


我想我可能会丢失一些东西。您是说不能让/ etc / hosts看起来像10.0.3.4 some.host.org another.domain.com出于某种编程原因,您必须使用引用吗?
jim_m_somewhere 2012年

Answers:


56

对于那些在论坛上没有帐户(或不想登录)的人:

如果您的主要问题不是ping而是ssh,则可以创建/编辑〜/ .ssh / config并添加以下行:

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
主机名部分需要换行。这是一个很好的教程,介绍如何制作这样的配置文件:mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander

1
好的解决方法,谢谢。但是,当然,更好的解决方案是在dns上使用cnames
Yura,

31

Linux通过设置HOSTALIASES env变量来支持别名。

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

那么你也能

ping fakehost

NB ping要求您将其设置为root用户,但是对于以该用户身份运行的任何应用程序,您都可以以任何用户身份执行。ping suids到根。


3
在Ubuntu 12.04上对我不起作用:(
Dimitry K

3
HOSTALIASES仅适用于未设置setuid标志的可执行文件。因此它不适用于ping(除非执行ping时已经是root用户)。我猜想这样做是为了避免欺骗setuid-executables使其连接到与其意图不同的主机。
鲍里斯(Boris)2015年

1
也不适用于卷曲
Benubird

7
它很少会达到预期的结果。 HOSTALIASES仅适用于使用getaddrinfo(3)或gethostbyname(3)的应用程序-这意味着它将适用于尝试通过特定系统调用明确解析主机名的应用程序:从来没有。请参阅unix.stackexchange.com/questions/10438/…, 所以唯一的解决方案是本地dns(dnsmasq)
Nadir

1
似乎不建议使用此技巧。gethostbyname *(),gethostbyaddr *(),herror()和hstrerror()函数已过时。如果您的系统在本地运行DNSMasq,则可以为使用DNS的任何分辨率指定别名。
teknopaul

24

您可以在DNS服务器上进行设置,CNAME记录允许一台主机被多个主机识别。因此,将CNAME记录添加到您的DNS服务器,如下所示:


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


3
可以尝试使用轻量级的DNS服务器dnsmasq(它还提供DHCP)。
sybreon

17

我经常使用环境变量来执行此操作。我知道这仅适用于命令行,但这是我最渴望主机名别名的地方(我使用了多个超级计算机帐户,并且都使用长URL)。这是一个示例,如果您正在使用BASH。在〜/ .bashrc中:

出口fakehost =“ long.ass.annoying.url.org”

然后,在新的外壳中:

ssh christopher @ $ fakehost


11

可以这样做的唯一方法是,如果您拥有自己的本地dns服务器。


1
是的,现在看来,这是唯一的解决方案。谢谢。我没有足够的声誉,因此无法投票。

如果问题是DSL或拨号连接的IP地址不断变化,那么dyndns是更好的解决方案,恕我直言。
斯文

不,这不是更好的解决方案。一旦服务器拥有由其他名称处理的主机名,则所有OP所需的就是第一个主机名的CNAME。DYNDNS和类似的东西依赖于主机通知dns服务器它的IP已更改。
theotherreceive

5

/etc/hosts.aliases的使用是绑定解析器库的标准功能。它比向/ etc / hosts中添加条目更健壮,并且可以在无法将CNAMES添加到DNS(无法访问它)时使用。

通常,最佳实践是在DNS中使用CNAMES,并在/etc/resolv.conf中定义适当的SEARCH。

由于必须使条目与IP更改保持同步,因此更新/ etc / hosts并不十分可靠。这仅在小范围内有效,或者在使用名称服务来分发主机映射(例如,通过ldap)时有效。

另一个解决方案可能是DNSMasq http://en.wikipedia.org/wiki/Dnsmasq


我尝试在CENTOS 6中使用/etc/hosts.aliases,但是此功能似乎不起作用。我也找不到有关其使用或存在的任何文档。我应该在哪里看?
mdpc

5

您将需要一个dyndns服务器,它将您的当前IP地址映射到主机名。每当您登录时,您都将告诉该服务器您当前的IP地址,它将更新您的主机名记录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.