插件窝 干货文章 如何批量修改Linux hostname

如何批量修改Linux hostname

hostname 修改 hosts 批量 872    来源:    2025-05-05

批量修改Linux主机名的方法

在Linux环境中批量修改多台服务器的主机名可以通过以下几种方法实现:

方法一:使用Ansible批量修改

# hosts.yml 文件内容
all:
  hosts:
    server1:
      ansible_host: 192.168.1.101
      new_hostname: web01
    server2:
      ansible_host: 192.168.1.102
      new_hostname: db01

# playbook.yml 文件内容
- hosts: all
  become: yes
  tasks:
    - name: Change hostname
      hostname:
        name: "{{ new_hostname }}"
    - name: Update /etc/hosts
      lineinfile:
        path: /etc/hosts
        regexp: '^127\.0\.1\.1'
        line: "127.0.1.1 {{ new_hostname }}"

执行命令:

ansible-playbook -i hosts.yml playbook.yml

方法二:使用Shell脚本结合SSH

#!/bin/bash

# 定义服务器列表和对应的新主机名
declare -A servers=(
  ["192.168.1.101"]="web01"
  ["192.168.1.102"]="db01"
  ["192.168.1.103"]="app01"
)

# SSH用户名和密钥
USER="admin"
KEY="/path/to/ssh_key"

for ip in "${!servers[@]}"; do
  new_hostname=${servers[$ip]}
  echo "Changing hostname of $ip to $new_hostname"

  ssh -i "$KEY" "$USER@$ip" << EOF
    sudo hostnamectl set-hostname "$new_hostname"
    sudo sed -i "s/^127\.0\.1\.1.*/127.0.1.1 $new_hostname/" /etc/hosts
EOF

  if [ $? -eq 0 ]; then
    echo "Successfully changed hostname for $ip"
  else
    echo "Failed to change hostname for $ip"
  fi
done

方法三:使用Puppet或Chef等配置管理工具

对于长期管理,可以使用配置管理工具如Puppet:

node 'web01.example.com' {
  class { 'hostname':
    hostname => 'web01',
  }
}
node 'db01.example.com' {
  class { 'hostname':
    hostname => 'db01',
  }
}

注意事项

  1. 修改主机名后需要更新/etc/hosts文件
  2. 某些服务可能需要重启才能识别新的主机名
  3. 对于云服务器,可能需要同时修改云平台中的实例名称
  4. 建议在非生产时段进行批量修改
  5. 修改前做好备份和回滚计划

验证修改

批量验证可以使用以下命令:

for ip in "${!servers[@]}"; do
  echo -n "$ip: "
  ssh -i "$KEY" "$USER@$ip" "hostname"
done

以上方法可以根据您的具体环境和需求选择最适合的方案。