本文整理 Proxmox VE 中 Ubuntu 虚拟机的常用初始化命令,并补充 community-scripts 的 Ubuntu 25.04 VM 安装入口。原始 discussion 标题为 “Useful Ubuntu 22.04/24.04 VM Commands”,这里按中文教程重写说明部分,代码块保持原样,便于直接复制执行。
适用场景:
- 使用 Proxmox VE 创建 Ubuntu 25.04 虚拟机。
- 需要配置 Cloud-Init、SSH、qemu-guest-agent。
- 需要把 Ubuntu VM 作为 Docker 宿主机,部署 Dockge 或 Portainer。
提醒:文中的 SSH 配置示例会允许 root 密码登录,只适合受控内网或临时初始化。生产环境建议改为普通用户 + SSH Key,并关闭 root 密码登录。
一、使用 community-scripts 创建 Ubuntu 25.04 VM
项目页面:
在 Proxmox VE 节点 Shell 中执行:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/vm/ubuntu2504-vm.sh)"脚本会交互式创建 Ubuntu 25.04 虚拟机。创建完成后,不要急着启动,先进入虚拟机的 Cloud-Init 页面完成初始化配置。
二、设置 Cloud-Init
进入 Proxmox VE Web UI,选择刚创建的 Ubuntu VM,然后打开 Cloud-Init 页面。

建议按下面顺序设置:
- 用户设置为
root,或者设置一个计划使用的普通用户名。 - 给该用户设置密码。
- 暂时不要启用磁盘自动扩容相关选项,后面手动扩容更容易确认。
- 设置网络参数,例如静态 IP、网关和 DNS。
- 点击
Regenerate Image,重新生成 Cloud-Init 镜像。
如果网络使用 DHCP,可以在 IP Config (net0) 中设置为:
ip=dhcp配置完成后再启动虚拟机。
三、使用 xterm.js 控制台
在 Proxmox VE 的 VM 控制台页面,建议从 Console 下拉菜单选择 xterm.js。这个控制台对复制和粘贴更友好,适合执行后续初始化命令。

四、调整启动磁盘容量
如果 community-scripts 创建的系统盘偏小,可以先在 Proxmox VE Web UI 中扩容虚拟磁盘:
Hardware > Hard Disk (scsi0) > Disk Action > Resize
填入需要增加的容量后确认。
五、在 Ubuntu 内扩展分区
进入 Ubuntu VM 后,使用 parted 扩展 /dev/sda1:
parted /dev/sda
resizepart 1交互过程中按下面方式回答:
Fix/Ignore? Fix
Partition number? 1
Yes/No? Yes
End? [2146MB]? -0
(parted) quit然后重启虚拟机:
reboot重启后可以检查磁盘空间:
df -h
lsblk六、启用 SSH 登录
下面命令会允许 root 密码登录,并移除 cloud image 默认的 SSH 限制文件:
sed -i -e 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' -e 's/^PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
rm /etc/ssh/sshd_config.d/60-cloudimg-settings.conf
systemctl restart sshd如果系统提示 sshd.service 不存在,可以改用 Ubuntu 常见的服务名:
systemctl restart ssh安全加固建议:
- 初始化完成后创建普通用户。
- 使用 SSH Key 登录。
- 关闭 root 密码登录。
- 确认防火墙只允许可信来源访问 SSH。
七、安装 qemu-guest-agent
qemu-guest-agent 是运行在虚拟机内部的 Guest Agent 服务,用来让 Proxmox VE 这类虚拟化平台和 VM 内部系统通信。启用后,宿主机可以更准确地读取虚拟机 IP、文件系统冻结状态、运行状态,也能更可靠地执行关机、重启等管理动作。
在 Ubuntu/Debian 虚拟机内安装:
apt-get update && apt-get -y upgrade
apt-get install -y qemu-guest-agent安装后一般还要设置开机自启并立即启动:
systemctl enable qemu-guest-agent
systemctl start qemu-guest-agent查看运行状态:
systemctl status qemu-guest-agent如果希望简单处理,也可以安装后直接重启:
reboot需要注意,qemu-guest-agent 真正生效需要同时满足两个条件:
- 虚拟化平台支持 QEMU Guest Agent。
- VM 设置中启用了 agent 通道。
在 Proxmox VE 中,还需要到虚拟机选项里启用:
Options -> QEMU Guest Agent -> Enabled如果 Proxmox VE 页面仍看不到 Guest Agent 信息,先确认虚拟机内 qemu-guest-agent 服务正在运行,再确认 Proxmox VM 选项中已经启用 QEMU Guest Agent。
八、安装 Docker
使用 Docker 官方安装脚本:
sh <(curl -sSL https://get.docker.com)安装后检查:
docker version
docker ps如果后续改用普通用户运行 Docker,需要把用户加入 docker 组:
sudo usermod -aG docker $USER重新登录 SSH 会话后再测试 docker ps。
九、安装 Docker Compose 插件
下面命令会从 GitHub 获取最新 Docker Compose 版本,并安装到 Docker CLI 插件目录:
LATEST=$(curl -sL https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -sSL https://github.com/docker/compose/releases/download/$LATEST/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
docker compose version如果 Ubuntu 软件源中已经提供满足需求的 Compose 插件,也可以改用:
apt-get install -y docker-compose-plugin
docker compose version十、安装 Dockge
Dockge 是一个 Docker Compose Web 管理工具。安装前应先确认 Docker Compose 已可用。
mkdir -p /opt/{dockge,stacks}
wget -q -O /opt/dockge/compose.yaml https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml
cd /opt/dockge
docker compose up -d访问地址:
http://虚拟机IP:5001如果浏览器提示 HTTPS 或反向代理需求,请根据实际部署方式调整。多数内网环境下先用 http://IP:5001 验证服务是否正常,再考虑通过 Nginx Proxy Manager、Caddy 或 Traefik 加 TLS。
十一、安装 Portainer
Portainer 是另一个常用 Docker Web 管理面板。使用 Docker run 部署:
docker volume create portainer_data
docker run -d \
-p 8000:8000 \
-p 9443:9443 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest访问地址:
https://虚拟机IP:9443第一次访问会要求创建管理员账号。
十二、收尾检查
完成安装后建议检查:
hostnamectl
ip addr
df -h
lsblk
systemctl status ssh --no-pager
systemctl status qemu-guest-agent --no-pager
docker ps
docker compose versionProxmox VE 页面中也应确认:
- VM 的 IP 能被 Guest Agent 正确读取。
- Cloud-Init 设置与预期一致。
- 系统盘容量已经扩展到目标大小。
- Dockge 或 Portainer 端口没有暴露到不可信网络。
常见问题
修改 Cloud-Init 后是否必须重建 VM?
不需要。可以关闭虚拟机,修改 Cloud-Init 页面中的用户、密码、网络等配置,然后点击 Regenerate Image,再启动虚拟机。
systemctl restart sshd 报错怎么办?
Ubuntu 上服务名通常是 ssh,可以执行:
systemctl restart ssh静态 IP 不通怎么办?
先在 Cloud-Init 中把 IP Config (net0) 临时改为 DHCP:
ip=dhcp点击 Regenerate Image 后重启 VM。确认网络正常后,再根据网关、掩码和 DNS 改回静态地址。
Dockge 和 Portainer 是否需要同时安装?
不一定。Dockge 更偏向管理 Compose 项目,Portainer 更偏向 Docker 资源和容器管理。二者可以同时存在,但端口、权限和反向代理规则需要分开规划。