Ubuntu 安装 KVM 虚拟化
1. Ubuntu 安装 KVM 虚拟化
KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块,它允许用户在 Linux 操作系统上创建和管理虚拟机。
如果机器的CPU不支持硬件虚拟化扩展,是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用QEMU的完全软件仿真模式来运行虚拟机,但是性能会极度低下。
检查您的 CPU 是否支持虚拟化:
运行以下命令,输出大于0,说明KVM与系统兼容,可以安装。
egrep -c 'vmx|svm' /proc/cpuinfo
或者安装cpu-checker工具。
apt install -y cpu-checker
它应该输出:
root@ubuntu:~# kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
Vmware workstation可以通过编辑虚拟机处理器选项,开启嵌套虚拟化。
环境信息:
- 安装环境:vmware workstation
- 操作系统:ubuntu 22.04 LTS
安装kvm软件包
配置主机名
root@ubuntu:~# hostnamectl set-hostname kvm-host
更新系统
apt update -y
安装必要的包:
## qemu+kvm
apt install -y qemu-kvm
## libvirt
apt install -y virt-manager libvirt-daemon-system virtinst libvirt-clients
## bridge tool
apt install -y bridge-utils
安装包说明:
qemu-kvm
- 为 KVM 管理程序提供硬件模拟的软件程序libvirt-daemon-system
- 将 libvirt 守护程序作为系统服务运行的配置文件libvirt-clients
- 用来管理虚拟化平台的软件bridge-utils
- 用来配置网络桥接的命令行工具virtinst
- 用来创建虚拟机的命令行工具
一旦软件包被安装好,libvirt 守护程序将会自动启动。你可以通过运行下面的命令验证:
root@kvm-host:~# systemctl is-active libvirtd
active
用户添加到 KVM 和 Libvirt 组
想要创建和管理虚拟机,你需要添加你的用户到libvirt
和kvm
用户组。
sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER
网络设置
在libvirt 安装过程中,一个被称为 virbr0
的桥接设备默认被创建。这个设备使用 NAT 来连接客户机到外面的世界。
查看网卡变化,新增了一个virtbr0
的网桥接口。
root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:93:99:53 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
运行 brctl
工具来列出当前的网桥和它们连接的接口:
root@kvm-host:~# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400939953 yes
默认网络设置适合大部分 Ubuntu 用户,但是有限制,由于虚拟机地址段为私有IP地址,你只能从虚拟机所在宿主机访问虚拟机地址,无法从外部网络访问虚拟机地址。
Libvirt默认NAT网络模式原理图:
如果需要从外部连接虚拟机,需要创建一个新的网桥,将该网桥桥接到物理网卡,以便虚拟机配置物理网段的IP地址,进而实现通过外部网络直连虚拟机。
下载 cloud image 镜像
下面以默认NAT网络模式为例,介绍使用 ubuntu cloud image 快速启动虚拟机。
以 jammy(Ubuntu Server 22.04 LTS)
为例
# 官方源
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img# 国内源
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/jammy/current/jammy-server-cloudimg-amd64.img
安装guestfs-tools 镜像定制工具
apt install -y guestfs-tools
创建镜像模板目录
mkdir -p /var/lib/libvirt/images/templates
复制镜像到模板目录
cp jammy-server-cloudimg-amd64.img /var/lib/libvirt/images/templates/
定制镜像参数
export image=/var/lib/libvirt/images/templates/jammy-server-cloudimg-amd64.img
virt-customize -a $image --run-command 'adduser ubuntu'
virt-customize -a $image --run-command 'echo "ubuntu:ubuntu123" | chpasswd'
virt-customize -a $image --run-command 'adduser ubuntu sudo'
virt-customize -a $image --run-command 'apt update -y'
virt-customize -a $image --run-command 'apt install -y qemu-guest-agent'
参数说明:
- 创建
ubuntu
用户,密码为ubuntu123
,并赋予sudo权限 - 更新系统软件索引(可选)
- 安装必要的软件包(可选)
创建虚拟机
创建虚拟机存储路径并复制镜像模板
mkdir -p /var/lib/libvirt/images/ubuntu01
cp /var/lib/libvirt/images/templates/jammy-server-cloudimg-amd64.img /var/lib/libvirt/images/ubuntu01/
使用virt-install命令创建虚拟机
virt-install \--name ubuntu01 \--vcpus 1 \--memory 2048 \--disk path=/var/lib/libvirt/images/ubuntu01/jammy-server-cloudimg-amd64.img \--os-variant ubuntu22.04 \--import \--noautoconsole
参数说明:
--name
:可选,指定虚拟机名称--vcps
:可选,指定虚拟机cpu大小--memory
:可选,指定虚拟机内存大小--disk path
:必选,指定虚拟机镜像位置--os-variant
:必选,指定虚拟机操作系统类型--import
:必选,指定虚拟机安装方式,安装方式不同该参数不同--noautoconsole
:可选,不指定该参数virt-install命令将始终处于挂起状态,需要另开窗口登录虚拟机
说明:使用osinfo-query
命令可以列出--os-variant
选项支持的所有参数。
$ apt install -y libosinfo-bin
$ osinfo-query os
命令示例输出如下
root@kvm-host:~# virt-install \--name ubuntu01 \--vcpus 1 \--memory 2048 \--disk path=/var/lib/libvirt/images/ubuntu01/jammy-server-cloudimg-amd64.img \--os-variant ubuntu22.04 \--import \--noautoconsoleStarting install...
Creating domain... | 0 B 00:00:00
Domain creation completed.
root@kvm-host:~#
创建虚拟机后,查看网口及网桥变化,主机新增vnet0
网卡,网桥新增vnet0
接口,说明虚拟机连接到了网桥上。
root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 52:54:00:93:99:53 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
4: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr0 state UNKNOWN group default qlen 1000link/ether fe:54:00:fc:fe:df brd ff:ff:ff:ff:ff:ffinet6 fe80::fc54:ff:fefc:fedf/64 scope link valid_lft forever preferred_lft foreverroot@kvm-host:~# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.525400939953 yes vnet0
查看虚拟机运行状态
root@kvm-host:~# virsh listId Name State
--------------------------1 ubuntu01 runningroot@kvm-host:~#
使用virsh console
命令连接到虚拟机,使用上面定义的用户密码ubuntu/ubuntu123
登录到虚拟机
virsh console ubuntu01
示例命令输出如下:
root@kvm-host:~# virsh console ubuntu01
Connected to domain 'ubuntu01'
Escape character is ^] (Ctrl + ])ubuntu login: ubuntu
Password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-100-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/proSystem information as of Fri Mar 15 11:31:43 UTC 2024System load: 0.0458984375 Memory usage: 8% Processes: 114Usage of /: 81.3% of 1.96GB Swap usage: 0% Users logged in: 0Expanded Security Maintenance for Applications is not enabled.1 update can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradableEnable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro statusThe programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.ubuntu@ubuntu:~$
ubuntu@ubuntu:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
ubuntu@ubuntu:~$
切换到root用户,输入ubuntu
用户的密码ubuntu123
ubuntu@ubuntu:~$ sudo -i
[sudo] password for ubuntu:
root@ubuntu:~#
root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000link/ether 52:54:00:fc:fe:df brd ff:ff:ff:ff:ff:ff
root@ubuntu:~#
可以看到网卡未获取任何IP地址,通过主机上的网桥接口virbr0
可以确认网桥地址段默认为192.168.122.0/24
,网关地址为192.168.122.1/24
,该地址段和网关就是虚拟机可用的地址段和网关。
确认虚拟机网卡名称为enp1s0
,虚拟机中创建网卡配置文件
cat >/etc/netplan/00-installer-config.yaml<<EOF
network:version: 2ethernets:enp1s0:dhcp4: falseaddresses:- 192.168.122.10/24nameservers:addresses:- 223.5.5.5- 223.6.6.6routes:- to: defaultvia: 192.168.122.1
EOF
启用网卡配置
root@ubuntu:~# chmod 600 /etc/netplan/00-installer-config.yaml
root@ubuntu:~# netplan apply
查看虚拟机网口状态为UP,并且配置了IP地址:
root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 52:54:00:fc:fe:df brd ff:ff:ff:ff:ff:ffinet 192.168.122.10/24 brd 192.168.122.255 scope global enp1s0valid_lft forever preferred_lft foreverinet6 fe80::5054:ff:fefc:fedf/64 scope link valid_lft forever preferred_lft forever
测试虚拟机访问外部网络
root@ubuntu:~# ping www.baidu.com -c 4
PING www.a.shifen.com (183.2.172.42) 56(84) bytes of data.
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=1 ttl=127 time=7.56 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=2 ttl=127 time=8.46 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=3 ttl=127 time=8.63 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=4 ttl=127 time=8.40 ms--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3007ms
rtt min/avg/max/mdev = 7.556/8.262/8.627/0.416 ms
root@ubuntu:~#
退出虚拟机执行exit命令,然后按键盘快捷键ctrl + ]
。
在kvm主机上查看虚拟机网卡IP地址(依赖虚拟机中的qemu-guest-agent
)
root@kvm-host:~# virsh domifaddr ubuntu01 --source agentName MAC address Protocol Address
-------------------------------------------------------------------------------lo 00:00:00:00:00:00 ipv4 127.0.0.1/8- - ipv6 ::1/128enp1s0 52:54:00:fc:fe:df ipv4 192.168.122.10/24- - ipv6 fe80::5054:ff:fefc:fedf/64
默认虚拟机不会随主机开机自动启动,可以使用以下命令配置随宿主机自动启动
root@kvm-host:~# virsh autostart ubuntu01
如果需要删除虚拟机,需要先将虚拟机关机
root@kvm-host:~# virsh shutdown ubuntu01
确认虚拟机已关机
root@kvm-host:~# virsh list --allId Name State
---------------------------- ubuntu01 shut off
然后执行以下命令删除虚拟机
root@kvm-host:~# virsh undefine ubuntu01
如果需要彻底删除虚拟机,则进一步删除虚拟机磁盘文件
root@kvm-host:~# rm -rf /var/lib/libvirt/images/ubuntu01/
2. 配置网桥共享物理网卡
桥接网络与其他虚拟机共享主机的真实网络接口,以连接到外部网络。因此,每个 VM 都可以直接绑定到任何可用的 IPv4 或 IPv6 地址,就像一台物理计算机一样。
默认情况下,KVM 设置了一个专用虚拟网桥,以便所有 VM 都可以在主机内相互通信。它提供自己的子网和 DHCP 来配置虚拟机的网络,并使用 NAT 访问主机网络。
查看 KVM 默认虚拟接口的 IP 地址:
root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:93:99:53 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
可以看到,KVM默认网络virbr0使用192.168.122.1/24 IP地址。所有虚拟机都将使用192.168.122.0/24 IP 范围内的 IP 地址,主机操作系统可通过192.168.122.1访问。应该能够从虚拟机操作系统内部通过 ssh 进入主机操作系统(位于 192.168.122.1)并使用 scp 来回复制文件。
如果您只从主机本身访问内部的 VM 就可以了。但是,无法从网络中的其他远程系统访问虚拟机。
为了从其他远程主机访问虚拟机,必须设置一个在主机网络上运行的公共网桥,并使用主机网络上的任何外部 DHCP 服务器。通俗地说,我们将使所有虚拟机使用主机系统使用的相同 IP 系列。
如果你打算从本机(Ubuntu 22.04)之外访问 KVM 虚拟机,你必须将虚拟机的网卡映射至网桥。virbr0 网桥是 KVM 安装完成后自动创建的,仅做测试用途。
物理桥接网络示意图:
禁用 KVM默认网络
接下来,我们应该禁用 KVM 为自己安装的默认网络。查看默认网络
root@kvm-host:~# virsh net-list Name State Autostart Persistent
--------------------------------------------default active yes yes
使用命令删除默认的 KVM 网络:
virsh net-destroy default
virsh net-undefine default
查看网桥及网桥接口都已经被删除
root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.93.9/24 brd 192.168.93.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
root@kvm-host:~# brctl show
root@kvm-host:~#
设置 KVM 公共网桥
现在,让我们设置 KVM 公共网桥以在创建新 VM 时使用。查找网络接口ens33的MAC地址:
root@kvm-host:~# ip a show
或者你可以运行命令,它将在 serial:
条目中输出 MAC 地址。
lshw -C network
为 VM(虚拟机)创建桥接网络。首先查看主机网卡默认配置
root@kvm-host:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:ethernets:ens33:addresses:- 192.168.93.9/24gateway4: 192.168.93.2nameservers:addresses:- 114.114.114.114- 8.8.8.8search: []version: 2
修改后如下,清除主机网卡ens33上的IP信息,转移到br0网桥上
$ sudo nano /etc/netplan/00-installer-config.yaml
network:ethernets:ens33:dhcp4: falsedhcp6: falsebridges:br0:interfaces: [ ens33 ]dhcp4: falsedhcp6: falseaddresses: [192.168.93.9/24]macaddress: 00:0c:29:15:cb:54routes:- to: defaultvia: 192.168.93.2nameservers:addresses: ["223.5.5.5","223.6.6.6"]parameters:stp: falseforward-delay: 4version: 2
请注意:需要将 br0
的 macaddress
设置为在上面找到的 ens33
的 MAC 地址。
测试网卡配置是否正确
netplan generate
确认检查无报错,使用 Netplan 应用更改
netplan apply
使用 ip addr 命令查看更改,如下所示:
root@kvm-host:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffaltname enp2s1
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:0c:29:15:cb:54 brd ff:ff:ff:ff:ff:ffinet 192.168.93.9/24 brd 192.168.93.255 scope global br0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe15:cb54/64 scope link valid_lft forever preferred_lft forever
root@kvm-host:~#
查看netplan创建的网桥及网桥上的接口
root@kvm-host:~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c2915cb54 no ens33
添加网桥到KVM
使用以下内容创建文件 br0.xml
:
mkdir -p /etc/kvm/
cat >/etc/kvm/host-bridge.xml<<EOF
<network><name>host-bridge</name><forward mode="bridge"/><bridge name="br0"/>
</network>
EOF
例如,该文件可能位于Linux 用户主目录中。如果在 root 下,它可能是/root/br0.xml
name
– 虚拟网络的简称。它可以是任何字母数字字符串forward
– 表示虚拟网络必须连接到物理网络。 mode=“bridge” 在我们的例子中意味着正在连接到在 libvirt 之外创建的网桥。bridge
– 确定要连接的网桥的名称。
virsh net-define /etc/kvm/host-bridge.xml
virsh net-start host-bridge
virsh net-autostart host-bridge
查看新增的网络
root@kvm-host:~# virsh net-listName State Autostart Persistent
------------------------------------------------host-bridge active yes yes
现在,安装 KVM 后,您可以继续在 KVM 上创建 Ubuntu 22.04 虚拟机。
测试创建虚拟机
新建虚拟机ubuntu02,创建存储路径并复制镜像模板
mkdir -p /var/lib/libvirt/images/ubuntu02
cp /var/lib/libvirt/images/templates/jammy-server-cloudimg-amd64.img /var/lib/libvirt/images/ubuntu02/
运行同样命令创建虚拟机
virt-install \--name ubuntu02 \--vcpus 1 \--memory 2048 \--disk path=/var/lib/libvirt/images/ubuntu02/jammy-server-cloudimg-amd64.img \--os-variant ubuntu22.04 \--import \--noautoconsole
连接到ubuntu02虚拟机
root@kvm-host:~# virsh console ubuntu02
确认虚拟机网卡名称为enp1s0
,虚拟机中创建网卡配置文件,注意这次配置的虚拟机IP与主机同一个网段。
cat >/etc/netplan/00-installer-config.yaml<<EOF
network:version: 2ethernets:enp1s0:dhcp4: falseaddresses:- 192.168.93.100/24nameservers:addresses:- 223.5.5.5- 223.6.6.6routes:- to: defaultvia: 192.168.93.2
EOF
启用网卡配置
root@ubuntu:~# chmod 600 /etc/netplan/00-installer-config.yaml
root@ubuntu:~# netplan apply
查看虚拟机网口状态为UP,并且配置了IP地址:
root@ubuntu:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 52:54:00:d0:fd:76 brd ff:ff:ff:ff:ff:ffinet 192.168.93.100/24 brd 192.168.93.255 scope global enp1s0valid_lft forever preferred_lft foreverinet6 fe80::5054:ff:fed0:fd76/64 scope link valid_lft forever preferred_lft forever
测试虚拟机访问外部网络
root@ubuntu:~# ping www.baidu.com -c 4
PING www.a.shifen.com (183.2.172.185) 56(84) bytes of data.
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=128 time=7.60 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=128 time=7.66 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=3 ttl=128 time=7.32 ms
64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=4 ttl=128 time=7.35 ms--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 7.321/7.484/7.662/0.148 ms
root@ubuntu:~#
测试外网访问虚拟机
C:\Users\pc>ping 192.168.93.100正在 Ping 192.168.93.100 具有 32 字节的数据:
来自 192.168.93.100 的回复: 字节=32 时间=1ms TTL=64
来自 192.168.93.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.93.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.93.100 的回复: 字节=32 时间<1ms TTL=64192.168.93.100 的 Ping 统计信息:数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):最短 = 0ms,最长 = 1ms,平均 = 0msC:\Users\pc>
配置SSH远程登录,修改以下两项
# vim /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
删除其他ssh配置,为root用户设置密码。
# rm -rf /etc/ssh/sshd_config.d/60-cloudimg-settings.conf
# ssh-keygen -A
# passwd root
重启sshd服务
systemctl restart sshd
测试通过SSH连接到虚拟机
C:\Users\pc>ssh root@192.168.93.100
root@192.168.93.100's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-100-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/proSystem information as of Fri Mar 15 12:28:35 UTC 2024System load: 0.0048828125 Processes: 116Usage of /: 81.7% of 1.96GB Users logged in: 1Memory usage: 9% IPv4 address for enp1s0: 192.168.93.100Swap usage: 0%Expanded Security Maintenance for Applications is not enabled.1 update can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradableEnable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro statusFailed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settingsLast login: Fri Mar 15 12:28:35 2024 from 192.168.93.1
root@ubuntu:~#
参考:https://docs.nvidia.com/dgx/bp-dgx/dgx2-kvm-networking.html
相关文章:

Ubuntu 安装 KVM 虚拟化
1. Ubuntu 安装 KVM 虚拟化 KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块,它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展,是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用…...

SA3D:基于 NeRF 的三维场景分割方法
Paper: Cen J, Zhou Z, Fang J, et al. Segment anything in 3d with nerfs[J]. Advances in Neural Information Processing Systems, 2024, 36. Introduction: https://jumpat.github.io/SA3D/ Code: https://github.com/Jumpat/SegmentAnythingin3D SA3D 是一种用于 NeRF 表…...

mysql实战开发之 mysql 删除一张表某个字段的sql语句
有一张表, 我需要删除这张表其中的某一个或者某几个字段, 相信大家在日常开发中应该会遇到这种情况, 然后刚好自己接触的项目安装的mysql关闭了允许远程连接的设置, 也就是说不允许使用类似于navicat 等可视化工具连接, 那么就没办法通过可视化工具直接去通过鼠标操作就可以 完…...

Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)
文章目录 前期准备1. 浏览器开启远程控制指令(1)Edge(2)Chrome 2. 执行python代码(1)先启动浏览器后执行代码(2)通过代码启动浏览器(3)Bug问题记录1ÿ…...

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里
【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到…...

数据结构——动态顺序表
数据结构的动态顺序表有以下几个操作:创建,销毁,初始化,增删查改和打印以及内存空间不够时的扩容 本文的宏定义: #define SeqTypeData int 1.动态顺序表的创建 typedef struct SeqListInit{//动态顺序表的创建SeqT…...

Android Studio实现内容丰富的安卓宠物医院管理系统
获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.系统公告 3.宠物社区(可发布宠物帖子…...
华为OD机试真题-启动多任务排序-2024年OD统一考试(C卷)
题目描述: 一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。 现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则…...

在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?
一、mac磁盘工具显示未装载 1.打开终端,输入 diskutil list查看当前硬盘列表,大多数时候,可以解决。 二、使用命令行装载硬盘 执行上面命令后,仍不起作用,则手动挂载,在命令行输入如下内容: …...

C++笔记:从零开始一步步手撕高阶数据结构AVL树
文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1:按照二叉搜索树的方法插入结点步骤2:自底向上调整平衡因子步骤3:触发旋转操作(AVL树平衡的精髓)右单旋左单旋左右双旋右左双旋…...

CodeSys通过C函数接口调用Qt
文章目录 1.背景介绍2.修改makefile2.1.将编译器由c改成c2.2.使能opencv库2.3.使能Qt库 3.在代码中使用Qt库函数 1.背景介绍 建议先查看之前的文章【CodeSys中调用C语言写的动态库】,了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方…...
线性代数笔记18--行列式公式、代数余子式
1. 行列式公式推导 二阶行列式推导 [ a b c d ] [ a 0 c d ] [ 0 b c d ] [ a 0 0 d ] [ a 0 c 0 ] [ 0 b c 0 ] [ 0 b 0 d ] [ a 0 0 d ] − [ b 0 0 c ] a d − b c \begin{align} \begin{bmatrix} a & b \\ c & d \end{bmatrix}& \begin{bmatrix} a &…...
最新2024年项目基金撰写与技巧及GPT融合应用
随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…...

Java八股文(Element Plus)
Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus? Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库,用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…...

【Hadoop】Hadoop概述与核心组件
目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop(常用)2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高(高可靠、高扩展、高效、高容错) Hadoop组成1.HDFS管理者:NameNode(n…...

3D地图在BI大屏中的应用实践
前言 随着商业智能的不断发展,数据可视化已成为一项重要工具,有助于用户更好地理解数据和分析结果。其中,3D地图作为一种可视化工具,已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合,以更加直观…...

JavaScript 进阶(二)
一、深入对象 1.1创建对象三种方式 1. 利用对象字面量创建对象 2. 利用 new Object 创建对象 3.利用构造函数创建对象 1.2 构造函数 构造函数 : 是一种特殊的函数,主要用来初始化对象。 使用场景: 常规的 {...} 语法允许创建一个对象。…...

基于ssm+layui的图书管理系统
基于ssmlayui的图书管理系统 账户类型分为:管理员,用户管理员私有功能用户私有功能公共功能技术栈功能实现图 视频演示 账户类型分为:管理员,用户 图书管理系统主要登录账户类型为管理员账户与用户账户 管理员私有功能 账户管理…...

2024年最新阿里云和腾讯云云服务器价格租用对比
2024年阿里云服务器和腾讯云服务器价格战已经打响,阿里云服务器优惠61元一年起,腾讯云服务器61元一年,2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比,阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…...

双指针算法_复写零
题目: 给一个固定长度的数组arr,将数组中出现的每一个0都复写一遍,并且将其余元素都往右移动 且不要再超过数组长度的位置写入元素,在数组上直接修改 示例: 双数组模拟操作: 从示例来看,因为…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...