在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而不是
svn://realhost/my_repos的身份访问我的Subversion服务器。

评论

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

#1 楼

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


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


Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3


评论


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

–代码指挥官
2012年8月6日18:41

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

– Iurii Vasylenko
16年1月19日在22:54



#2 楼

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

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


,则可以

ping fakehost


N.B。 ping要求您将其设置为root用户,但是您可以以该用户身份运行的任何应用程序以任何用户身份进行操作。将suid ping到根。

评论


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

– Dimitry K
2014年11月17日下午17:36

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

–鲍里斯(Boris)
2015年6月4日14:13在

也不适用于卷曲

– Benubird
15年6月17日在9:55

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

–纳迪尔
16 Sep 17'9:19



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

– teknopaul
17 Mar 16 '17 15:44



#3 楼

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


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


评论


尝试使用的轻量级DNS服务器将是dnsmasq(它还提供DHCP)。

– sybreon
2009年9月14日下午16:25

#4 楼

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

export fakehost =“ long.ass.annoying.url.org”

,然后在新鲜的外壳中:

ssh christopher @ $ fakehost

#5 楼

唯一可以实现的方法是拥有自己的本地dns服务器。

评论


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

–user10178
09-09-14 16:16

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

– Sven
09-09-14 16:16

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

–theotherreceive
2009年9月14日下午16:37

#6 楼

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

#7 楼

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

通常,最佳实践是在DNS中使用CNAMES,并在/etc/resolv.conf中定义适当的SEARCH。条目必须与IP更改保持同步。这仅在小范围内有效,或者当您使用名称服务来分发主机映射时(例如通过ldap)。

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

评论


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

–mdpc
17年6月15日在19:43