所以我尝试这样做:
ssh $(hostname)
它告诉我:
ssh: Could not resolve hostname woofy: Name or service not known
它知道自己的主机名是“woofy”;为什么它无法连接到自身?
答案1
所以我们知道hostname
回报woofy
。但该名称无法解析为 IP 地址。
简而言之,您需要为woofy
in添加一个条目/etc/hosts
。使其解析为 127.0.0.1。或者,如果您的系统支持 IPv6,则 ::1。
保留以前版本的备份,/etc/hosts
以防万一出错(我etckeeper
为此使用方便的包,但如果您更喜欢旧的方式,您可以使用手动备份甚至 RCS)。
长的答案是,主机名如何解析为 IP 地址是由一组配置文件控制的,这些配置文件在 Unix 变体之间略有不同。您可以将 Unix 系统配置为通过主机文件(/etc/hosts
几乎可以在任何 Unix 系统上工作)或通过 DNS(具有直接 IP 可达性的 Internet 的系统将始终执行此操作)来解析主机名。还有其他替代方案,但大多使用较少(包括 LDAP 和 NIS/NIS+)。请参阅维基百科文章有关名称服务开关有关于此的更多背景信息。
编辑:如果这仍然导致 DNS 查找,问题可能是您的名称服务交换机配置之前咨询了 DNS,/etc/hosts
因此更改/etc/hosts
没有效果。尝试查看/etc/nsswitch.conf
(NSS 的配置方式因操作系统而异)。
答案2
Unix 系统有一个与网络子系统无关的主机名概念。该名称是hostname
命令显示的内容以及日志中显示的内容。当您建立 ssh 连接时,它会执行域名系统查找,找出该名称在上下文中的含义TCP/IPSSH 运行的协议族。
为了您的理智,您最好确保该主机名与您附近的 DNS 服务器所说的一致,以及您的系统认为它的名称(如果有的话)一致。事实上,DNS 名称与计算机无关,而是与网络接口相关联,因此您的 DNS 名称将与您的网络接口之一相关联。在没有实际网络连接的计算机上,主机名应与环回界面。
实际上,主机名存储在/etc/hostname
大多数计算机上的文件中。您可以在运行时使用以下命令更改它hostname
;这是在启动过程的早期完成的。 DNS 名称的本地概念存储在 中,位于与环回接口 ( ) 或计算机的网络接口之一/etc/hosts
相对应的线路上。127.0.0.1