在Linux环境中批量修改多台服务器的主机名可以通过以下几种方法实现:
# 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
#!/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:
node 'web01.example.com' {
class { 'hostname':
hostname => 'web01',
}
}
node 'db01.example.com' {
class { 'hostname':
hostname => 'db01',
}
}
/etc/hosts
文件批量验证可以使用以下命令:
for ip in "${!servers[@]}"; do
echo -n "$ip: "
ssh -i "$KEY" "$USER@$ip" "hostname"
done
以上方法可以根据您的具体环境和需求选择最适合的方案。