当我尝试使用ssh
终端命令连接到我的 Ubuntu 设备时,我必须.local
为 Ubuntu 主机名添加后缀。例如,如果我想通过主机名 ssh 到我的设备,我的 ssh 命令必须具有.local
后缀,并且命令具有以下格式:
ssh username@device_hostname.local
我知道.local
后缀是由 avahi (zeroconf) Linux 服务附加的,但是有什么快速(简单)的方法可以绕过它吗?我希望能够仅通过其主机名“ssh”我的设备,而在命令末尾没有 .local 后缀,如下所示:
ssh username@device_hostname
我到底想要实现的是.local
从主机名中完全删除后缀。我已经阅读了有关运行我的私有 DNS 服务器的信息,但我想知道是否有一个不太复杂的解决方案。
您的客户端至少需要一种方法来将主机名解析为 IP 地址。您已经发现的机制通过自动配置工作并发生在
.local
域名内。您可以在每个客户端上定义从主机名到 IP 地址的映射,但这不是推荐的做法。
您将不得不通过某种自动名称解析机制,所有这些都需要在后台使用某种域名。
但是,您可以通过执行以下操作之一轻松摆脱每次都输入域名的麻烦:
ssh 主机名规范化
如果将以下内容放入
/etc/ssh_config
or~/.ssh/config
:ssh 将自动将本地附加到任何主机名。因此,当您键入时,
ssh host
它实际上会执行ssh host.local
.搜索域
虽然上述仅适用于 ssh,但您也可以通过在客户端上相应地配置 dns 解析器来为所有网络连接配置类似的东西。这是拥有主机名快捷方式的“经典”方式。
根据您的设置,您将添加
local
到搜索域列表中。这就是我所做的。应该有很多可用的描述,比如 this。硬编码到 /etc/hosts
完全不建议这样做,因为虽然一开始看起来很简单,但很快就会变得难以维护。但这是我知道的唯一可以完全摆脱域名的方法。
编辑文件
/etc/hosts
并添加如下行:而每行的第一个字是对应主机的IP地址。你必须对每个客户都这样做。之后您就可以使用
ssh host3
了,即使在后台也不会使用域名。/etc/hostname 中是您要更新的名称。例如 mydomiain.com,我假设您具有 root 访问权限。也可以使用命令主机名。所以你需要用 vi 更新文件。第 1 行中的任何内容都需要使用您的域名进行更新。很简单。