感觉可以参考:https://ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/
在 Ubuntu Server 上通过命令行创建 Windows 10 虚拟机并进行远程访问,可以使用 KVM(基于内核的虚拟机)和 virt-install
命令来创建虚拟机,远程访问可以通过 RDP
(远程桌面协议)或者通过 VNC
来进行。以下是完整的步骤:
步骤 1: 安装虚拟化软件
首先,确保你的 Ubuntu 服务器上已安装了 KVM 和相关虚拟化工具。
更新系统:
复制代码
sudo apt update sudo apt upgrade
安装 KVM 和相关工具:
复制代码
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
qemu-kvm
: KVM虚拟化模块libvirt-daemon-system
: KVM 管理工具bridge-utils
: 网络桥接工具virt-manager
: 图形管理工具(可选,用于其他操作)
步骤 2: 启动并启用 libvirtd
服务
确保 KVM 服务已启用并在系统启动时自动启动:
复制代码
sudo systemctl enable libvirtd sudo systemctl start libvirtd
1. 为 libvirt-qemu
用户授予访问权限
虚拟机的进程是由 libvirt-qemu
用户运行的。要解决此问题,需要确保 libvirt-qemu
用户对文件有访问权限。
使用 setfacl
命令授予访问权限:
执行以下命令以为 libvirt-qemu
用户授予读取权限:
bash
复制代码
# 授予 libvirt-qemu 用户对目录的搜索权限 sudo setfacl -m u:libvirt-qemu:rx /home/ubuntu
sudo setfacl -m u:libvirt-qemu:rx /home/ubuntu/virtual_machine sudo setfacl -m u:libvirt-qemu:rx /home/ubuntu/virtual_machine/iso # 授予 libvirt-qemu 用户对文件的读取权限 sudo setfacl -m u:libvirt-qemu:r /home/ubuntu/virtual_machine/iso/windows10.iso
步骤 3: 创建虚拟机
你可以使用 virt-install
命令来创建一个 Windows 10 虚拟机。
准备 Windows 10 安装 ISO 镜像
确保你已经准备好了 Windows 10 的 ISO 镜像文件,并且知道它的路径。假设镜像路径为 /path/to/windows10.iso
。
创建虚拟机
使用 virt-install
创建 Windows 10 虚拟机。以下是命令示例:
bash
复制代码
sudo virt-install \
--name win10-desktop \
--ram 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/win10-desktop.qcow2,size=50 \
--cdrom /home/ubuntu/virtual_machine/iso/windows10.iso \
--os-variant win10 \
--network bridge=virbr0 \
--graphics spice,listen=0.0.0.0
参数说明:
--name
:虚拟机名称--ram
:分配的内存(4GB)--vcpus
:分配的 CPU 核数--disk
:虚拟机硬盘的位置和大小(50GB)--cdrom
:Windows 10 安装 ISO 镜像路径--os-type
和--os-variant
:操作系统类型和版本(Windows 10)--network bridge=virbr0
:桥接网络,使虚拟机可以访问外部网络--graphics vnc,listen=0.0.0.0
:启用 VNC 图形接口,允许远程连接到虚拟机的图形界面,listen=0.0.0.0
使 VNC 接口可从任何地方连接--extra-args
:启用串行控制台,以便通过命令行安装操作系统
使用无头虚拟机
如果不需要图形界面,可以在无头模式下运行虚拟机,并且通过ssh访问,这对服务器环境非常有用;
可以移除 --graphics
参数,运行虚拟机仅以命令行方式进行操作,例如:
sudo virt-install \
--name windows10-vm \
--ram 4096 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/windows10-vm.qcow2,size=50 \
--cdrom /home/ubuntu/virtual_machine/iso/windows10.iso \
--os-variant win10 \
--network bridge=virbr0
步骤 4: 启动虚拟机
虚拟机创建完成后,使用以下命令启动虚拟机:
复制代码
sudo virsh start windows10-vm
步骤 5: 远程访问虚拟机
1. 使用 VNC 连接到虚拟机
如果你启用了 VNC
图形界面,可以使用 VNC 客户端(如 TigerVNC
或 RealVNC
)来连接到虚拟机的图形界面。
获取虚拟机的 IP 地址:
使用以下命令查看虚拟机的 IP 地址:
复制代码
sudo virsh console windows10-vm
在虚拟机中运行 ip a
来查看 IP 地址。假设虚拟机的 IP 地址是 192.168.1.100
。
使用 VNC 客户端连接:
通过
VNC
客户端连接到虚拟机,地址为IP地址:端口
,例如192.168.1.100:5900
。如果在宿主机上访问,你可以在本地的 VNC 客户端中使用该地址进行连接。
2. 使用 RDP 连接到虚拟机(Windows 安装后)
安装并配置好 Windows 10 操作系统后,你可以通过 RDP(远程桌面协议)来远程访问虚拟机。你需要确保虚拟机安装了 Windows 远程桌面服务。
在虚拟机中启用远程桌面:
打开 Windows 设置 > 系统 > 远程桌面。
启用远程桌面。
确保防火墙允许 RDP 流量。
获取虚拟机的 IP 地址(通过
ip a
或使用virsh console
连接查看)。
使用 RDP 客户端(如 Remmina
、rdesktop
或 Windows 自带的远程桌面)连接到虚拟机:
复制代码
rdesktop 192.168.1.100
或者,如果使用 Windows 自带的远程桌面,输入虚拟机的 IP 地址进行连接。
3. 通过 SPICE 协议远程访问虚拟机
SPICE 是一种专门用于虚拟机的远程协议,通常在 KVM 环境中使用。virt-viewer
是一个 SPICE 客户端,可以连接到虚拟机。
步骤:
在虚拟机上启用 SPICE 访问: 在 virt-install
命令中,使用 --graphics spice
参数来启用 SPICE 访问。例如:
复制代码
sudo virt-install \
--name ubuntu-vm \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu-vm.qcow2,size=20 \
--cdrom /path/to/ubuntu.iso \
--os-type linux \
--os-variant ubuntu20.04 \
--network bridge=virbr0 \
--graphics spice \
--extra-args "console=ttyS0,115200n8 serial"
使用 virt-viewer
连接虚拟机: 安装 virt-viewer
客户端:
复制代码
sudo apt install virt-viewer
然后使用 virt-viewer
连接虚拟机:
复制代码
virt-viewer ubuntu-vm
这将启动一个图形界面,连接到虚拟机。
优点:
支持高效的图形界面,适用于虚拟机图形化操作。
通过 SPICE 协议,性能比 VNC 更高。
步骤 6: 配置虚拟机的自动启动
如果希望虚拟机在宿主机启动时自动启动,可以执行以下命令:
复制代码
sudo virsh autostart windows10-vm
这会确保虚拟机在宿主机开机时自动启动。
虚拟机基本操作
查看当前运行的虚拟机
ubuntu@y410p:~$ sudo virsh list
Id Name State
------------------------------
9 windows10-vm running
ubuntu@y410p:~$ sudo virsh list --all
Id Name State
------------------------------
9 windows10-vm running
停止虚拟机
ubuntu@y410p:~$ sudo virsh shutdown windows10-vm
Domain 'windows10-vm' is being shutdown
强制停止虚拟机
ubuntu@y410p:~$ sudo virsh destroy windows10-vm
Domain 'windows10-vm' destroyed
删除虚拟机
ubuntu@y410p:~$ sudo virsh undefine windows10-vm
Domain 'windows10-vm' has been undefined