Ubuntu主機名同步方法
要同步Ubuntu主機的主機名(即永久修改并確保各配置文件一致),需通過以下步驟操作:
hostnamectl
命令設置主機名(推薦)hostnamectl
是systemd提供的工具,可同時更新內核主機名、動態主機名及/etc/hostname
文件,無需重啟即可生效(部分服務可能需要重啟)。
sudo hostnamectl set-hostname new-hostname # 將"new-hostname"替換為目標主機名
/etc/hostname
文件/etc/hostname
是Ubuntu存儲靜態主機名的核心文件,需確保其內容與hostnamectl
設置的一致:
sudo nano /etc/hostname # 刪除舊主機名,寫入"new-hostname",保存退出
/etc/hosts
文件/etc/hosts
文件用于本地主機名解析,需將舊主機名替換為新主機名(避免網絡服務無法識別):
sudo nano /etc/hosts # 找到"127.0.1.1"或"127.0.0.1"行,將舊主機名替換為"new-hostname"
# 示例:127.0.1.1 new-hostname
若系統使用networking
服務或NetworkManager,重啟服務可使更改立即生效:
sudo systemctl restart networking # 適用于傳統networking服務
# 或
sudo systemctl restart NetworkManager # 適用于NetworkManager
通過以下命令確認主機名已同步:
hostnamectl # 顯示詳細主機名信息(靜態/動態/靈活主機名)
hostname # 僅顯示當前主機名
若需在多臺Ubuntu主機間同步主機名(如集群環境),可使用配置管理工具Ansible自動化操作,避免手動重復執行:
在控制節點(管理主機)上安裝Ansible:
sudo apt update
sudo apt install ansible -y
新建sync_hostname.yml
文件,定義主機名同步任務:
---
- hosts: all # 目標主機組(需在ansible inventory文件中定義)
become: yes # 以root權限執行
tasks:
- name: Set new hostname
hostname:
name: new-hostname # 替換為目標主機名
notify:
- restart networking
handlers:
- name: restart networking
systemd:
name: networking
state: restarted
通過以下命令執行同步(需提前配置目標主機的SSH免密登錄):
ansible-playbook sync_hostname.yml
sudo
或root權限。/etc/hostname
、/etc/hosts
及hostnamectl
顯示的主機名完全一致,避免解析錯誤。