设置主机名

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

设置有意义且可识别的主机名,有助于简化管理和维护工作,并增强系统的安全性(例如,基于主机名的访问控制规则)。本文介绍了设置主机名的常见命令hostname和hostnamectl,以及作为网络管理服务的NetworkManager如何管理和设置主机名。

使用限制

操作系统:Alibaba Cloud Linux 3。

hostname查询和设置临时主机名

警告

通过hostname命令设置的主机名在系统重启后将失效。为实现主机名的永久化,可以通过修改/etc/hostname文件来进行设置。

  • hostname命令查询主机名。

    hostname
  • hostname命令设置主机名。

    以设置主机名为alinux-dev-test为例。

    sudo hostname alinux-dev-test

hostnamectl查询和设置主机名

hostnamectl是一个与用户交互的前端工具,用于设置或显示主机名及相关信息,并通过调用systemd-hostnamed服务来实现这些更改。systemd-hostnamed则是在后台执行实际主机名管理工作的服务组件。

  • hostnamectl查询主机名。

    # 查询静态主机名
    hostnamectl --static
    # 查询临时主机名
    hostnamectl --transient

    结果如下图所示。

    image

  • hostnamectl设置主机名。

    1. 设置主机名。

      以设置主机名为alinux-dev-test为例。

      sudo hostnamectl set-hostname alinux-dev-test

      查看设置后的静态主机名和临时主机名。

      hostnamectl --static
      hostnamectl --transient

      结果如下图所示,hostnamectl默认同时设置静态主机名和临时主机名。

      image

    2. 查看/etc/hostname文件。

      cat /etc/hostname

      结果如下图所示,/etc/hostname文件中也保存最新的静态主机名。

      image

(重要)NetworkManager管理和设置主机名

说明

NetworkManager在配置网络连接时会处理与网络接口相关的主机名设置。当通过NetworkManager修改网络连接的设置时,NetworkManager将通过dbus接口通知systemd-hostnamed进行主机名的更改。

NetworkManager通过在NetworkManager.conf文件中将hostname-mode参数值设置为default或dhcp来管理和设置临时主机名。hostname-mode的具体参数说明如下:

参数值

参数说明

default

默认值。

  • 已设置静态主机名:NetworkManager使用该静态主机名作为临时主机名。

  • 未设置静态主机名:通过DHCP(Dynamic Host Configuration Protocol)获取临时主机名。

    • 可以获取到:将获取的结果作为临时主机名。

    • 未获取到:通过反向DNS查找的方式获取临时主机名。

      如果反向DNS查找失败,则获取NetworkManager以外服务所设置的临时主机名(例如通过hostname命令设置的主机名)。如果该临时主机名有效,则直接使用;否则,NetworkManager默认将临时主机名设置为localhost.localdomain。

dhcp

  • 已设置静态主机名:NetworkManager使用该静态主机名作为临时主机名。

  • 未设置静态主机名:通过DHCP获取。

    • 可以获取到:将获取的结果作为临时主机名。

    • 未获取到:如果DHCP获取失败,则获取NetworkManager以外服务所设置的临时主机名(例如通过hostname命令设置的主机名)。如果该临时主机名有效,则直接使用;否则,NetworkManager默认将临时主机名设置为localhost.localdomain。

none

NetworkManager不会管理和设置临时主机名。

使用示例

如需自行设置主机名,为避免与NetworkManager的主机名管理机制发生冲突,可以通过以下几种方式进行设置。

  • (推荐)通过hostnamectl设置静态主机名。以设置主机名为alinux-dev-test为例。

    sudo hostnamectl set-hostname alinux-dev-test
  • 配置hostname-mode=none设置NetworkManager不管理主机名。

    1. 打开/etc/NetworkManager/NetworkManager.conf文件。

      sudo vim /etc/NetworkManager/NetworkManager.conf
    2. i键进入编辑模式,在[main]下面添加以下内容。

      hostname-mode=none
    3. Esc键,输入:wq后按Enter键,保存配置。

    4. 重启NetworkManager使配置生效。

      sudo systemctl restart NetworkManager
  • 通过自定义systemd服务设置主机名。

    在自定义systemd服务的service文件中添加以下配置,以确保其在NetworkManager服务之前启动。

    [Unit]
    Before=NetworkManager.service