插件窝 干货文章 如何用脚本批量修改hostname

如何用脚本批量修改hostname

Hostname 主机 修改 使用 557    来源:    2025-05-04

批量修改主机名(Hostname)的脚本方案

根据您的需求,我将提供几种在不同环境下批量修改主机名的方法。

Linux系统批量修改hostname

方法1: 使用bash脚本批量修改

#!/bin/bash

# 定义新主机名列表,格式: IP或当前主机名 新主机名
HOSTS=(
"192.168.1.10 server01"
"192.168.1.11 server02"
"192.168.1.12 server03"
)

# SSH凭据
USER="your_username"
PASS="your_password"  # 建议使用SSH密钥而非密码

for entry in "${HOSTS[@]}"; do
    read -r ip new_hostname <<< "$entry"

    echo "正在修改 $ip 的主机名为 $new_hostname"

    # 使用sshpass传递密码(不推荐生产环境使用)
    sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no $USER@$ip "
        sudo hostnamectl set-hostname $new_hostname
        echo '127.0.1.1 $new_hostname' | sudo tee -a /etc/hosts
        echo '主机名已修改为: $(hostname)'
    "

    if [ $? -eq 0 ]; then
        echo "$ip 修改成功!"
    else
        echo "$ip 修改失败!" >&2
    fi
done

方法2: 使用Ansible批量修改

---
- hosts: all
  become: yes
  tasks:
    - name: Set hostname
      hostname:
        name: "{{ new_hostname }}"
      when: new_hostname is defined

    - name: Ensure hostname is in /etc/hosts
      lineinfile:
        path: /etc/hosts
        regexp: '^127\.0\.1\.1'
        line: '127.0.1.1 {{ new_hostname }}'
        state: present
      when: new_hostname is defined

执行命令:

ansible-playbook -i inventory.ini change_hostname.yml -e "new_hostname=desired_hostname"

Windows系统批量修改hostname

使用PowerShell脚本

# 定义计算机名映射表
$computerMap = @{
    "192.168.1.20" = "win-pc01"
    "192.168.1.21" = "win-pc02"
    "192.168.1.22" = "win-pc03"
}

$credential = Get-Credential

foreach ($entry in $computerMap.GetEnumerator()) {
    $ip = $entry.Key
    $newName = $entry.Value

    try {
        $session = New-PSSession -ComputerName $ip -Credential $credential -ErrorAction Stop

        Invoke-Command -Session $session -ScriptBlock {
            param($newName)
            Rename-Computer -NewName $newName -Force -Restart:$false
        } -ArgumentList $newName

        Write-Host "$ip 的主机名已修改为 $newName" -ForegroundColor Green
        Remove-PSSession $session
    }
    catch {
        Write-Host "无法连接到 $ip 或修改失败: $_" -ForegroundColor Red
    }
}

注意事项

  1. 权限要求:修改主机名通常需要管理员/root权限
  2. 网络连接:确保脚本执行机器能访问所有目标主机
  3. 安全性
    • 避免在脚本中硬编码密码,建议使用SSH密钥或Ansible Vault
    • 生产环境推荐使用配置管理工具(Ansible/SaltStack/Puppet)
  4. 影响
    • 某些服务可能依赖主机名,修改后需要重启服务
    • 在域环境中修改主机名需额外考虑域控制器配置

您需要根据实际环境调整上述脚本,特别是认证方式和主机名列表部分。