折腾笔记

折腾笔记

PVE自动添加IP地址标签脚本

2025-09-08

一键脚本

wget -O script.sh https://ip-script.zwbcc.cn/set_ip_script.sh && chmod +x script.sh && ./script.sh

必要条件

虚拟机必须安装了qemu-guset-agent

1、安装 QEMU Guest Agent

Ubuntu/Debian 系统

sudo apt update
sudo apt install qemu-guest-agent
sudo systemctl start qemu-guest-agent
sudo systemctl enable qemu-guest-agent

CentOS/RHEL 系统

sudo yum install qemu-guest-agent
sudo systemctl start qemu-guest-agent
sudo systemctl enable qemu-guest-agent

Fedora 系统

sudo dnf install qemu-guest-agent
sudo systemctl start qemu-guest-agent
sudo systemctl enable qemu-guest-agent

验证安装

systemctl status qemu-guest-agent

安装完成后,重启虚拟机以使 guest agent 完全生效。

apt install   qemu-guest-agent   # debian类别

标签设置

设置标签显示,数据中心➡️选项➡️标记样式设定➡️树形结构,选择完整

脚本

#!/bin/bash

# ---------------------------
# 脚本说明:
# 遍历本地 PVE 节点所有虚拟机和容器
# QEMU虚拟机 -> 局域网 IP 写入 tags
# LXC容器 -> 局域网 IP 写入 tsgs
# 前提:QEMU虚拟机需安装并运行 qemu-guest-agent
# ---------------------------


echo "开始处理本地节点所有虚拟机和容器..."

# 获取所有 QEMU 虚拟机 ID
QMIDS=$(qm list | awk 'NR>1 {print $1}')

for VMID in $QMIDS; do
    echo "处理 QEMU 虚拟机 $VMID ..."

    # 获取虚拟机局域网IPv4地址 (10.x.x.x)
    IP=$(qm guest cmd $VMID network-get-interfaces 2>/dev/null | \
         grep -oP '"ip-address" : "\K10\.[0-9]+\.[0-9]+\.[0-9]+')

    if [ -z "$IP" ]; then
        echo "  未获取到IP (可能未安装 qemu-guest-agent 或虚拟机未运行)"
        continue
    fi

    echo "  获取到IP: $IP"

    # 写入虚拟机tags
    qm set $VMID --tags "$IP"

    echo "  已将IP写入虚拟机tags"
done

# 获取所有 LXC 容器 ID
CTIDS=$(pct list | awk 'NR>1 {print $1}')

for CTID in $CTIDS; do
    echo "处理 LXC 容器 $CTID ..."

    # 获取容器局域网IPv4地址 (10.x.x.x)
    IP=$(pct exec $CTID -- ip -4 addr show | grep -oP '(?<=inet\s)10\.[0-9]+\.[0-9]+\.[0-9]+')
    

    if [ -z "$IP" ]; then
        echo "  未获取到IP (容器未运行或网络未配置)"
        continue
    fi

    echo "  获取到IP: $IP"

    # 写入容器 tags
    pct set $CTID --tags "$IP"

    echo "  已将IP写入容器 tags标签"
done

echo "全部处理完成!"

# 定时任务命令
cron_job="0 2 * * * /bin/bash /root/test.sh >> /var/log/test.log 2>&1"

# 检查任务是否已存在
( crontab -l 2>/dev/null | grep -F "$cron_job" ) >/dev/null

if [ $? -ne 0 ]; then
    # 没有就添加
    ( crontab -l 2>/dev/null; echo "$cron_job" ) | crontab -
    echo "定时任务已添加"
else
    echo "定时任务已存在"
fi

使用方法

登录 Proxmox VE点击Shell,在任意目录下创建文件,将脚本内容粘贴至该文件中,赋予执行权限后运行即可。

最终效果

脚本添加了定时任务,每天会自动更新

  • 0