要使用脚本批量修改多个主机的主机名,可以根据你使用的操作系统选择不同的方法。以下分别介绍在 Linux 和 Windows 系统中实现的方法。
假设你有一个包含所有主机名和对应 IP 地址的文件 hosts_list.txt
,格式如下:
192.168.1.10 host1
192.168.1.11 host2
192.168.1.12 host3
你可以编写一个 Bash 脚本来读取该文件并逐个修改主机名。
#!/bin/bash
# 定义主机名列表文件
HOST_LIST="hosts_list.txt"
# 读取每一行
while IFS=' ' read -r ip hostname
do
echo "正在配置主机名 $hostname (IP: $ip)"
# 修改 /etc/hostname 文件
echo "$hostname" | sudo tee /etc/hostname > /dev/null
# 修改 /etc/hosts 文件
sudo sed -i "s/^192.168.1.10.*/$ip $hostname/g" /etc/hosts # 根据实际 IP 修改
# 重启网络服务以应用更改
sudo systemctl restart networking
# 或者使用以下命令重启网络
# sudo /etc/init.d/networking restart
echo "主机名 $hostname 已配置完成"
done < "$HOST_LIST"
步骤说明:
hosts_list.txt
文件中每行包含 IP 地址和对应的主机名,用空格分隔。while
循环逐行读取 hosts_list.txt
。echo
将新的主机名写入 /etc/hostname
。sed
命令更新 /etc/hosts
文件中的对应条目。chmod +x rename_hosts.sh
sudo ./rename_hosts.sh
如果你有大量主机需要管理,使用 Ansible 可以更方便地批量修改主机名。
安装 Ansible
首先,确保你已经安装了 Ansible:
pip install ansible
创建 Ansible Playbook
创建一个名为 rename_hosts.yml
的文件,内容如下:
---
- name: 批量修改主机名
hosts: your_group
become: yes
tasks:
- name: 修改 /etc/hostname
replace:
path: /etc/hostname
regexp: '^.*$'
replace: "{{ inventory_hostname }}"
- name: 修改 /etc/hosts
replace:
path: /etc/hosts
regexp: '192.168.1.{{ inventory_ip }}\s+.*'
replace: '{{ inventory_ip }} {{ inventory_hostname }}'
- name: 重启网络服务
systemd:
name: networking
state: restarted
执行 Playbook
运行以下命令来执行 Playbook:
ansible-playbook -i inventory_file rename_hosts.yml
说明:
your_group
是你在 Ansible 的 inventory
文件中定义的主机组。inventory_hostname
和 inventory_ip
是 Ansible 提供的特殊变量,分别代表当前主机的名称和 IP 地址。inventory_file
中正确列出了所有目标主机。假设你有一个 CSV 文件 computers.csv
,包含 IP
和 Hostname
两列:
IP,Hostname
192.168.1.10,PC1
192.168.1.11,PC2
192.168.1.12,PC3
你可以使用以下 PowerShell 脚本来批量修改计算机名。
# 定义 CSV 文件路径
$csvPath = "computers.csv"
# 读取 CSV 文件
$computers = Import-Csv -Path $csvPath
foreach ($computer in $computers) {
$ip = $computer.IP
$hostname = $computer.Hostname
# 远程连接到目标计算机(需要管理员权限)
$session = New-PSSession -ComputerName $ip -Credential (Get-Credential)
# 在远程会话中设置新的计算机名
Invoke-Command -Session $session -ScriptBlock {
param($newHostname)
Rename-Computer -NewName $newHostname -Force
# 可选:更新 DNS 缓存
Clear-DnsClientCache
} -ArgumentList $hostname
# 关闭会话
Remove-PSSession -Session $session
Write-Host "已成功将 $ip 的计算机名更改为 $hostname"
}
步骤说明:
computers.csv
文件中包含目标计算机的 IP 地址和新的主机名。Import-Csv
读取 CSV 文件中的数据。New-PSSession
建立远程连接(需要输入目标计算机的用户名和密码)。Invoke-Command
在远程计算机上执行 Rename-Computer
命令来修改主机名。rename_windows_hosts.ps1
.\rename_windows_hosts.ps1
注意事项:
对于简单的批量操作,可以使用批处理脚本结合 WMIC
命令。
@echo off
setlocal enabledelayedexpansion
REM 定义 CSV 文件路径
set "csvFile=computers.csv"
REM 读取 CSV 文件并逐行处理
for /f "tokens=1,2 delims=," %%a in (%csvFile%) do (
set "ip=%%a"
set "hostname=%%b"
REM 使用 WMIC 修改计算机名
wmic computersystem where name="%%a" call rename name="!hostname!"
echo 已将 %ip% 的计算机名更改为 !hostname!
)
endlocal
说明:
WMIC
命令用于远程修改计算机名,需要确保目标计算机允许远程管理。/etc/hostname
、/etc/hosts
(Linux)或相关系统文件,以防止意外情况发生。希望以上方法能帮助你顺利批量修改主机名。如有进一步问题,欢迎继续提问!
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读: linux怎么查看所有进程占用内存情况