Watch at Ease看见世界,读懂生活。

科技 · 实用指南

sudo 提示“unable to resolve host”?先沿 NSS 追踪本机主机名

先证明运行时主机名和真实 NSS 查询路径,找出配置所有者,再只修一层并复验 sudo。

原创插画:用 getent hosts 或 ahosts 测试配置的 NSS 路径。
原创插画:对准确主机名运行 getent hosts;需要区分地址族时再用 getent ahosts。它们遵循 NSS 路径。host 或 dig 这类仅查 DNS 的工具可能绕过本地文件和 NSS 模块,结果不同并不矛盾。 Watch at Ease

这条警告说明机器无法通过已配置的 hosts 数据库解析自己当前的主机名,并不自动等于互联网 DNS 故障。先保留准确名称,再沿应用实际使用的查询路径排查。

冻结准确的本机身份

记录 sudo 警告里的字面名称、hostname 输出、可用时的 hostnamectl 状态,以及它属于物理机、虚拟机、容器还是 CI runner。先不要补域名、改大小写或猜测哪个文件错误。

测试真实 hosts 数据库

对准确主机名运行 getent hosts;需要区分地址族时再用 getent ahosts。它们遵循 NSS 路径。host 或 dig 这类仅查 DNS 的工具可能绕过本地文件和 NSS 模块,结果不同并不矛盾。

读取实际来源顺序

检查 /etc/nsswitch.conf 的 hosts 行,记录 files、myhostname、resolve、dns 等模块的顺序与控制条件。然后只检查本应回答本机名的来源。files 缺项、NSS 模块缺失和纯 DNS 失败是不同分支。

找出持久配置所有者

静态 Debian 类主机要比较运行时名称、持久主机名和已验证的本地映射;云镜像、DHCP、NetworkManager、cloud-init、systemd-hostnamed、容器或编排环境要找出谁会重建名称或文件。修所有者,不修临时输出。

只修一个已证实层级

纠正一个已验证的名称不一致或模块配置。保留 localhost 与有效别名,不要为了消除警告随意追加地址或全局改名。临时容器和 CI 应修镜像、入口脚本或运行时映射,让结果在下次启动仍存在。

分开验证并闭环

重复 hostname 与 getent,再执行无副作用的 sudo 验证和原命令。只有配置所有者要求时才重启或重建,并在生命周期事件后重测。外部 DNS 另行验证,避免本机自解析与互联网可达性互相掩盖。

原创插画:files、myhostname、云镜像或容器运行时都可能拥有结果。
原创插画:静态 Debian 类主机要比较运行时名称、持久主机名和已验证的本地映射;云镜像、DHCP、NetworkManager、cloud-init、systemd-hostnamed、容器或编排环境要找出谁会重建名称或文件。修所有者,不修临时输出。 Watch at Ease