在注销并重新登录之前,shell 命令无法识别对 /etc/hosts 的更改

在注销并重新登录之前,shell 命令无法识别对 /etc/hosts 的更改

我今天注意到我的服务器上存在这种行为,我想进一步了解发生了什么。

w通过 ssh 连接到我的 RHEL 6 服务器时发出命令时,我试图让 FROM 字段打印主机名而不是 SSH 客户端的 IP。请注意,ping例如,我使用 8.8.8.8 作为 DNS,并且 google.com 的解析可以正常工作。

因此,我编辑了 SSH 服务器上的 /etc/hosts 以包含客户端的条目。现在通过主机名 Ping 客户端可以正常工作,但w仍会在 FROM 字段中显示 IP 地址。

只需注销并重新登录并w再次发出,FROM 字段就可以按我在 /etc/hosts 中配置的主机名列出 SSH 客户端。

我的问题是,为什么需要注销/登录?重新登录后发生了什么变化或更新?

我正在使用 bash-4.1.2-33.el6_7.1,这是 RHEL 6 基础中的最新版本。

答案1

w读取/var/run/utmp以找出谁登录以及他们从哪里登录。 utmp当用户登录或注销时,记录会更新。

如果没有 DNS 或/etc/hostsIP 条目用户登录时然后登录进程(在本例中为 sshd)将主机名字段utmp留空。

当您注销并在添加/etc/hosts条目后再次登录时,sshd对 IP 进行了查找,这次找到了主机名,因此能够将正确的数据添加到 中的主机名字段中utmp

man 5 utmp有关文件格式的详细信息,请参见/var/run/utmp

相关内容