如何用脚本批量修改hostname

51
2025/3/14 6:32:14
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

要使用脚本批量修改多个主机的主机名,可以根据你使用的操作系统选择不同的方法。以下分别介绍在 LinuxWindows 系统中实现的方法。


在 Linux 上批量修改主机名

方法一:使用 Bash 脚本

假设你有一个包含所有主机名和对应 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"

步骤说明:

  1. 准备主机名列表文件:确保 hosts_list.txt 文件中每行包含 IP 地址和对应的主机名,用空格分隔。
  2. 脚本解释
    • 使用 while 循环逐行读取 hosts_list.txt
    • 使用 echo 将新的主机名写入 /etc/hostname
    • 使用 sed 命令更新 /etc/hosts 文件中的对应条目。
    • 重启网络服务以应用新的主机名。
  3. 执行脚本
    • 给脚本添加执行权限:chmod +x rename_hosts.sh
    • 运行脚本:sudo ./rename_hosts.sh

方法二:使用 Ansible 自动化工具

如果你有大量主机需要管理,使用 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_hostnameinventory_ip 是 Ansible 提供的特殊变量,分别代表当前主机的名称和 IP 地址。
  • 确保你的 inventory_file 中正确列出了所有目标主机。

在 Windows 上批量修改计算机名

方法一:使用 PowerShell 脚本

假设你有一个 CSV 文件 computers.csv,包含 IPHostname 两列:

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"
}

步骤说明:

  1. 准备 CSV 文件:确保 computers.csv 文件中包含目标计算机的 IP 地址和新的主机名。
  2. 脚本解释
    • 使用 Import-Csv 读取 CSV 文件中的数据。
    • 遍历每一行,使用 New-PSSession 建立远程连接(需要输入目标计算机的用户名和密码)。
    • 使用 Invoke-Command 在远程计算机上执行 Rename-Computer 命令来修改主机名。
    • 关闭会话并输出成功信息。
  3. 执行脚本
    • 将脚本保存为 rename_windows_hosts.ps1
    • 右键以管理员身份运行 PowerShell,并执行脚本:.\rename_windows_hosts.ps1

注意事项:

  • 远程连接需要目标计算机允许远程管理,并且你有足够的权限。
  • 如果目标计算机在不同的域或工作组,可能需要调整脚本中的认证方式。

方法二:使用批处理脚本结合 WMIC

对于简单的批量操作,可以使用批处理脚本结合 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

说明:

  • 该方法假设 CSV 文件格式正确,并且批处理文件与 CSV 文件在同一目录下。
  • WMIC 命令用于远程修改计算机名,需要确保目标计算机允许远程管理。

注意事项

  1. 备份配置:在进行批量修改之前,建议备份 /etc/hostname/etc/hosts(Linux)或相关系统文件,以防止意外情况发生。
  2. 权限要求:修改主机名通常需要管理员或超级用户权限,请确保脚本以适当的权限运行。
  3. 网络配置:修改主机名后,可能需要更新网络配置,如 IP 地址、DNS 设置等,以确保主机间的正常通信。
  4. 测试脚本:在生产环境中运行脚本前,先在测试环境中验证脚本的正确性和效果。

希望以上方法能帮助你顺利批量修改主机名。如有进一步问题,欢迎继续提问!

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: linux怎么安装jdk并配置环境变量