为什么我的 /etc/hosts 文件没有被读取?

为什么我的 /etc/hosts 文件没有被读取?

我的/etc/hosts文件如下所示:

# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to persist
# then you will need to either
# a.) make changes to the master file in /etc/cloud/templates/hosts.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
#     /etc/cloud/cloud.cfg or cloud-config from user-data
127.0.1.1 ansible-server ansible-server
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

node1 0.0.0.0
node2 0.0.0.0

我添加了node1and node2,自然 IP0.0.0.0就被节点的 IP 替换了。

我认为这工作得很好,但事实并非如此。我认为 SSH 只是忽略该hosts文件:

root@ansible-server:~# ssh root@node1
ssh: Could not resolve hostname node1: Name or service not known
root@ansible-server:~# ssh root@node2
ssh: Could not resolve hostname node2: Name or service not known

但是,我也无法通过名称 ping 这些服务器:

root@ansible-server:~# ping node1
ping: unknown host node1
root@ansible-server:~# ping node2
ping: unknown host node2

很明显我在这里做了一些非常愚蠢的事情......但是什么?

附加信息:该服务器运行 Ubuntu 14.04.2 LTS,并托管在 DigitalOcean 上。这发生在 Ansible 服务器上的服务器。

答案1

行的格式/etc/hosts是地址在前,名称在后

0.0.0.0 node1 
0.0.0.0 node2 
192.168.1.1 myroutermaybe
8.8.8.8 googledns # in case DNS doesn't work for DNS???
127.0.0.1 localhost 

或者多个名称映射到同一地址的情况

0.0.0.0 node1 node2 node3 stitch626 

添加,感谢 fpmurphy1 的提醒:

第一个名称(如果多个)用作等的规范或“官方”名称gethostbyaddr,因此,如果您有分配给该计算机/地址的域名,通常最清晰且最有用的是输入完全限定域名( FQDN) 作为名字。

答案2

7年零5个月前提问

为什么我的 /etc/hosts 文件没有被读取?

看着/etc/nsswitch.conf

这条线

hosts:      files dns myhostname

如果没有files,那么肯定不会被读取;如果files不是首先出现的,那么首先出现的内容将被首先使用,并且可能会给人这样的印象:您的/etc/hosts文件没有被读取,因为在它到达之前在其他任何内容中找到的任何内容主机文件。

我的示例取自 RHEL 7.9。 files几乎总是排在第一位,至少在干净的 Linux 安装中是默认的。但是,当 Linux 配置为无论在何处使用时,这一点都可以并且将会改变。

相关内容