题 是否可以在Linux中为主机名设置别名?


是否可以在Linux中为主机名设置别名?

jmillikin在各种Ubuntu论坛上都提出了如下问题:


是否可以创建主机名别名?有点像/ etc / hosts, 但使用其他主机名而不是IP地址。有一些 像这样的文件,你可以ping“fakehost1”,它将被重新映射 到“realhost”,然后“realhost”将被解析为一个IP地址。

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

有人回答了ssh,但没有回答ping等问题。我的主要问题 目的是将它用作a的别名 颠覆 服务器。在我的情况下,realhost 是在动态IP地址下。因此,“/ etc / hosts”别名不起作用。我想要 访问我的Subversion服务器 svn://my_svnserver/my_repos 代替 svn://realhost/my_repos


75
2017-09-14 15:56




我想我可能会遗漏一些东西。你是说你不能让/ etc / hosts看起来像10.0.3.4 some.host.org another.domain.com你必须使用一个参考的一些程序化的原因? - jim_m_somewhere


答案:


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

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

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

46
2017-08-26 20:21



Hostname部分需要在新行上。这是一个关于如何制作这样的配置文件的好教程: mattryall.net/blog/2008/06/ssh-favourite-hosts - Code Commander
好的解决方法,谢谢。但是,当然,更好的解决方案是在dns上使用cnames - Iurii


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

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

然后你可以

ping fakehost

注: ping要求您以root用户身份进行设置,但您可以作为以该用户身份运行的任何应用程序的任何用户执行此操作。 ping suto to root。


28
2018-03-21 18:41



在Ubuntu 12.04上没有为我工作:( - Dimitry K
HOSTALIASES仅适用于未设置setuid标志的可执行文件。所以它不适用于ping(除非你在执行ping时已经是root)。我想这样做是为了避免欺骗setuid-executables连接到不同于它的意图的主机。 - Boris
也不适用于卷曲 - Benubird
它很少会以预期的结果结束。 HOSTALIASES仅适用于使用getaddrinfo(3)或gethostbyname(3)的应用程序  - 这意味着它将适用于尝试通过特定系统调用明确解析主机名的应用程序:从来不是这样。看到 unix.stackexchange.com/questions/10438/...  所以唯一的解决方案是本地dns(dnsmasq) - Nadir
似乎这个技巧已被弃用。 gethostbyname *(),gethostbyaddr *(),herror()和hstrerror()函数已过时。如果您的系统在本地运行DNSMasq,则可以为任何使用DNS的解决方案添加别名。 - teknopaul


您可以在DNS服务器上设置此项,CNAME记录允许多台主机名称知道计算机。因此,将CNAME记录添加到您的DNS服务器,如下所示:


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


23
2017-09-14 16:04



谢谢,我会在设置我的本地DNS服务器之后立即尝试。
一个轻量级的DNS服务器试试 dnsmasq (它也提供DHCP服务)。 - sybreon


我经常用环境变量做这件事。我知道这只适用于命令行,但它是我最常渴望的主机名别名(我使用了几个超级计算机帐户,都有长URL)。 这是一个例子,如果你使用的是BASH。 在〜/ .bashrc中:

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

然后,在一个新鲜的壳:

ssh christopher @ $ fakehost


16
2017-07-23 16:15





这样做的唯一方法就是拥有自己的本地DNS服务器。


8
2017-09-14 16:02



是的,现在似乎是唯一的解决方案。谢谢。因为我没有足够的声誉,所以不能upvote。
如果DSL或拨号连接的IP地址不断变化是问题,dyndns是一个更好的解决方案,恕我直言。 - Sven♦
不,这不是一个更好的解决方案。一旦服务器具有由其他东西处理的主机名,则所有OP需求都是第一个主机名的CNAME。 DYNDNS和类似的东西依赖于主机通知dns服务器它已经改变了ip。 - theotherreceive


/etc/hosts.aliases的使用是绑定解析程序库的标准功能。它比向/ etc / hosts添加条目更强大,如果您无法将CNAMES添加到DNS(无权访问它),则可以使用它。

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

更新/ etc / hosts不是很健壮,因为条目必须与IP更改保持同步。这仅适用于小规模或当您使用名称服务来分发主机映射时(例如,通过ldap)。

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


4
2017-10-28 03:44



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


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


4
2017-09-14 16:05