Linux修改主机名必须同步更新内核主机名、/etc/hostname静态配置和/etc/hosts本地解析三处,否则会导致SSH失败、服务启动异常等问题;推荐systemd系统用sudo hostnamectl set-hostname并手动更新/etc/hosts,旧系统还需改/etc/sysconfig/network。

Linux 修改主机名不是改一个地方就行,关键要让三处保持一致:内核当前使用的名称、系统持久化配置、本地解析映射。否则容易出现 SSH 连不上、服务启动失败、ping 不通自己主机名等问题。
确认当前主机名状态
先检查系统当前的三类状态,避免盲目修改:
-
内核主机名(瞬态):运行
hostname或uname -n -
静态配置文件:查看
cat /etc/hostname -
本地解析条目:运行
grep -E '127\.0\.0\.1|127\.0\.1\.1' /etc/hosts,确认是否含旧主机名
临时修改(重启即失效)
仅用于测试或紧急调试,不推荐长期使用:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 执行
sudo hostname new-hostname - 该命令直接写入
/proc/sys/kernel/hostname,立即生效 - 新会话中需重新登录或执行
exec bash才能在提示符中看到变化
永久修改(推荐 systemd 系统)
适用于 Ubuntu 16.04+、Debian 9+、CentOS/RHEL 7+、Fedora 等主流发行版:
- 运行
sudo hostnamectl set-hostname new-hostname(小写字母、无空格、无下划线) - 该命令自动更新
/etc/hostname并通知 systemd 重载 - 必须手动编辑
/etc/hosts:将原主机名(常在127.0.1.1行)替换成新主机名,保留127.0.0.1 localhost不变
旧系统或特殊发行版(如 CentOS 6)
若系统未使用 systemd(如 CentOS 6、部分嵌入式环境):
- 编辑
/etc/sysconfig/network,修改HOSTNAME=后的值 - 同时更新
/etc/hosts中对应行(通常为127.0.0.1或127.0.1.1开头) - 执行
sudo hostname new-hostname立即同步内核名 - 重启网络服务或整机(
sudo systemctl restart systemd-networkd或sudo reboot)确保全部服务识别新名










