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

102 linux hostname alias

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

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


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

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3
Run Code Online (Sandbox Code Playgroud)

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

Xio*_*iov 71

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

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

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3
Run Code Online (Sandbox Code Playgroud)


tek*_*aul 37

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

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile
Run Code Online (Sandbox Code Playgroud)

然后你可以

ping fakehost
Run Code Online (Sandbox Code Playgroud)

NB ping 要求您以 root 身份进行设置,但您可以以任何用户身份对以该用户身份运行的任何应用程序进行设置。ping suids 到 root。

  • 它很少会达到预期的结果。**主机名仅适用于使用 getaddrinfo(3) 或 gethostbyname(3) 的应用程序** - 这意味着它适用于尝试通过特定系统调用显式解析主机名的应用程序:情况并非如此。请参阅 http://unix.stackexchange.com/questions/10438/can-i-create-a-user-specific-hosts-file-to-complement-etc-hosts 所以唯一的解决方案是本地 dns (dnsmasq) (7认同)
  • 在 Ubuntu 12.04 上对我不起作用 :( (3认同)
  • HOSTALIASES 仅适用于未设置 setuid 标志的可执行文件。所以它对 ping 不起作用(除非你在执行 ping 时已经是 root)。我想这样做是为了避免欺骗 setuid-executables 连接到与其意图不同的主机。 (3认同)
  • 也不适用于 curl (2认同)

Ali*_*ani 25

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


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 
Run Code Online (Sandbox Code Playgroud)

  • 要尝试的轻量级 DNS 服务器将是 `dnsmasq`(它也提供 DHCP)。 (4认同)

小智 20

我经常用环境变量来做到这一点。我知道这仅适用于命令行,但它是我最渴望主机名别名的地方(我使用过几个超级计算机帐户,所有帐户都带有长 URL)。这是一个示例,如果您使用的是 BASH。在 ~/.bashrc 中:

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

然后,在一个新的外壳中:

ssh 克里斯托弗@$fakehost


the*_*ive 11

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


Sve*_*ven 6

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


Tom*_*lam 5

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

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

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

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