您可以使用 VMware 提供的 GUI vSphere Client 和基于 Web 的 VMware vSphere Web/HTML5 Client 来管理 ESXi 主机和您的 VMware 环境。虽然大多数设置都可以在 GUI 中找到,但有时您可能需要获取信息或更改 GUI 中未显示的配置。
在这种情况下,您需要命令行界面(CLI)或“控制台”,它允许您配置所有设置,包括隐藏的设置。除了 Linux 和 ESXi 中相同的传统命令外,ESXi 还有自己的 ESXCLI 命令。
本博客文章以目录的形式列出了有用的 ESXCLI 命令,这些命令是 ESXi shell 命令的一部分。
如何打开 ESXi Shell 控制台
默认情况下,ESXi shell 对本地和远程访问都是禁用的。这意味着在您启用 ESXi shell 或 SSH 访问之前,您无法运行 ESXi shell 命令。出于安全原因,VMware 强制执行此限制。
让我们来看看启用 ESXi 命令行界面的三种主要方法。
使用默认 ESXi 界面启用对控制台的访问
当您可以物理访问 ESXi 主机时,包括主机的监视器和键盘时,可以使用此方法。
- 在 ESXi 直接控制台用户界面(DCUI)中,转到 故障排除选项,导航到 启用 ESXi Shell 和 启用 SSH 字符串,并按 Enter 启用每个选项。
- 启用ESXi shell后,按Alt+F1在运行ESXi的机器上打开控制台。然后输入登录名和密码(可以使用root用户的凭据)。
- 您可以执行ESXi shell命令。
- 如果需要返回ESXi DCUI,请按Alt+F2。 启用SSH选项允许您通过SSH客户端远程打开ESXi控制台。
通过VMware Host Client启用对控制台的访问
- 打开一个Web浏览器,在地址栏中输入ESXi主机的IP地址,然后登录。
- 转到主机>操作>服务,然后点击启用安全外壳(SSH)以在ESXi重新启动之前启用SSH访问。
同样,您可以在服务菜单中为本地ESXi主机启用控制台外壳。转到管理>服务。右键单击TSM-SSH服务。点击策略>与主机一起启动和停止以在ESXi重新启动后继续启用SSH访问。
- 现在您可以使用SSH客户端远程连接到ESXi控制台。
通过vCenter和VMware vSphere Client启用对控制台的访问
如果您的ESXi主机由vCenter Server管理,则可以使用此方法。
- 在Web浏览器中登录VMware HTML5 vSphere Client。
- 转到主机和集群,然后选择您的ESXi主机。
- 选择配置选项卡,打开系统 > 服务,并在服务列表中单击SSH。
- 点击开始按钮启动SSH服务器,或者点击编辑启动策略并选择与主机一起启动和停止,如果您希望将SSH服务器启用一段较长的时间。您还可以在服务菜单中启用ESXi Shell。
一旦启用SSH访问,您就可以使用SSH客户端远程连接到ESXi主机并运行ESXCLI命令。
通过SSH连接
为了通过SSH远程连接到ESXi控制台,在Linux控制台上执行以下操作。
- 执行如下命令:
ssh 192.168.101.221
或者
其中192.168.101.221是本示例中使用的ESXi服务器的IP地址。
- 您需要输入ESXi用户的用户名和密码(root可以作为ESXi上的默认管理用户)。
类似地,您可以通过命令行从一个ESXi主机连接到另一个ESXi主机。
在Windows中,您可以使用PuTTY:
- 打开PuTTY
- 输入ESXi主机的IP地址和端口。
- 点击打开以通过SSH连接到ESXi主机。
通过SSH连接到ESXi主机并远程运行ESXCLI命令是最常用且安全的方法。
如何在Linux中安装ESXCLI
远程运行ESXCLI命令的另一种方法是在Linux上安装ESXCLI。必须安装Python以实现此目的。以下是在Linux中安装ESXCLI的主要步骤:
- 在进行系统更改之前备份您的Linux机器。
- 从VMware网站
- 下载ESXCLI的内容(以root身份运行):
tar zxf esxcli-8.0.0-22179150.tgz -C /opt/vmware
- 使用以下命令运行ESXCLI安装程序:
python setup.py install
- 尝试连接到 ESXi 主机并远程运行 ESXCLI 命令:
esxcli --server ESXI_IP_address --help
您将会收到错误提示,因为 ESXi 要求主机之间建立信任关系:
证书错误。服务器 SHA-256 指纹:64:CC:E5:F8:A4:AA:F6:9B:58:55:78:B7:E3:B3:69:10:83:3B:22:3C:BB:17:3D:12:28:D1:CD:E9:48:7A:FF:AA(不受信任)
- 要解决此问题,请使用指定的用户名、密码和前一输出消息中显示的指纹运行命令:
esxcli --server 192.168.101.101 --username root --password 'your_password' --thumbprint 64:CC:E5:F8:A4:AA:F6:9B:58:55:78:B7:E3:B3:69:10:83:3B:22:3C:BB:17:3D:12:28:D1:CD:E9:48:7A:FF:AA --help
或者,您可以尝试在 Linux 机器上安装证书。证书存储在 ESXi 主机的/etc/vmware/ssl/rui.crt中。
ESXCLI 命令概述
ESXCLI,作为ESXi Shell的一部分,是管理虚拟基础架构(如硬件、网络、存储等ESXi组件)以及在低级别控制ESXi的CLI框架。从技术上讲,ESXCLI是一个Python脚本(在ESXi中为/bin/esxcli.py)。所有ESXCLI命令必须在ESXi Shell(控制台)中运行。一般来说,esxcli
是一个具有广泛子命令列表(称为命名空间)及其选项的命令。在ESXi安装之后,esxcli
命令会立即出现,以及其他ESXi Shell命令。
在执行以下命令后,您可以找到esxcli并探索ESXCLI的性质:
which esxcli
ls -l /sbin/esxcli
通过检查控制台输出,您可以确保ESXCLI是一个Python脚本,位于/sbin/目录中。如果您想查看脚本的内容,可以使用内置文本编辑器vi。
基本上,ESXCLI的语法如下:
esxcli [options] {namespace}+ {cmd} [cmd options]
因此,ESXCLI由分支组成,这些分支是ESXCLI命令的主要类别(命名空间)。请注意,esxcli命令是大小写敏感的,类似于ESXi中使用的其他控制台命令。运行命令后,所有可用ESXCLI命名空间和命令的完整列表将显示:
esxcli esxcli command list
可用的ESXCLI命令列表取决于ESXi版本。可以添加新命令。
因此,ESXi 8.0的顶级ESXCLI命名空间列表如下:
- 设备 – 设备管理器命令
- esxcli – 与 ESXCLI 本身相关的命令
- fcoe – 以太网上的光纤通道命令
- 图形 – VMware 图形命令
- 硬件 – 用于检查硬件属性和配置硬件的命令
- iscsi – VMware iSCSI 命令
- 网络 – 此命名空间包括管理主机网络设置的各种命令(例如 ESXi 主机的 IP 地址、DNS 设置、防火墙)以及虚拟网络组件,如 vSwitch、端口组等
- nvme – 管理 VMware NVMe 驱动程序的扩展
- rdma – 用于管理远程直接内存访问协议栈的命令
- sched – 用于配置调度和 VMkernel 系统属性的命令
- 软件 – 管理 ESXi 软件镜像和 ESXi 包的命令
- 存储 – 用于管理存储的命令
- 系统 – 用于配置 VMkernel 系统属性、内核核心系统和系统服务的命令
- 虚拟机 – 一些可用于控制虚拟机操作的命令
- vsan – VMware vSAN 命令
主要命令以表示相同操作的动词形式出现:
- 列表 – 显示所定义命名空间的可用对象列表(例如,
esxcli hardware bootdevice list
– 列出可用的引导设备) - 获取 – 获取所定义设置或属性的值(例如,
esxcli hardware clock get
– 检查设置的时间) - 设置 – 手动设置必要的参数(例如,
esxcli hardware clock set -y 2024 -s 00
– 将年份设置为2024并将秒设置为00) - 加载/卸载 – 加载/卸载系统配置(
esxcli network firewall load
– 加载配置文件中存储的防火墙模块和防火墙设置)
如果您无法记住与适当命名空间相关的特定ESXCLI命令,您可以输入命令并在控制台输出中查看提示。
例如,键入:
esxcli network
以查看 网络 命名空间的所有可用命令
然后键入:
esxcli network vm
以检查 vm 命名空间的命令。
ESXCLI日志文件位于/var/log/esxcli.log
如果ESXCLI命令执行失败,数据将写入此文件。如果ESXCLI命令成功运行,则不会将任何内容写入此日志文件。
有用的ESXCLI命令
现在您已经熟悉了ESXCLI命令的基本工作原理,让我们看一些在VMware vSphere中可以使用的有用命令的具体示例。本文考虑的ESXCLI命令列表被分成了相当于命名空间名称的类别。
在ESXi中检查硬件详细信息的命令
通过使用hardware命名空间,您可以查看有关安装设备的完整信息。
- 为了查看已安装的PCI设备,请运行以下ESXCLI命令:
esxcli hardware pci list | more
- 检查ESXi服务器上安装的内存量:
esxcli hardware memory get
- 查看安装处理器的详细信息:
esxcli hardware cpu list
ESXCLI系统命令
在本节中,您可以看到system ESXCLI命名空间的命令。
- 检查精确的ESXi版本和构建编号,包括安装的更新和补丁数量:
esxcli system version get
- 检查 ESXi 服务器的主机名:
esxcli system hostname get
- 检查 ESXi 安装时间:
esxcli system stats installtime get
- 检查 SNMP 配置:
esxcli system snmp get
- 将 ESXi 主机输入维护模式:
esxcli system maintenanceMode set --enable yes
- 退出维护模式:
esxcli system maintenanceMode set --enable no
将 ESXi 主机输入维护模式后,可以关闭或重新启动主机。
- 关闭 ESXi 主机电源:
esxcli system shutdown poweroff
- 重新启动主机的命令类似:
esxcli system shutdown reboot
- 你还可以设置延迟并写一个重新启动主机的原因,以保存在系统日志中:
esxcli system shutdown reboot -d 60 -r "安装补丁"
在这个例子中,延迟是60秒。
另一个命令是设置自定义欢迎消息,而不是标准的背景屏幕,其中显示了一个带有阴影的非活动主菜单,“<F2> 自定义系统/查看日志 <F12> 关机/重新启动”提示以及用于管理主机的IP地址。请注意,在设置了自定义欢迎消息后,您将只在黑屏上看到此设置的消息。您可以手动输入“按 F2”以避免混淆。
- 当用户未登录时,自定义消息可用于隐藏有关ESXi主机的信息,该信息显示在连接到ESXi主机的显示器上。
esxcli system welcomemsg set -m="欢迎使用NAKIVO!按 F2"
- 验证欢迎消息是否已设置:
esxcli system welcomemsg get
ESXCLI网络命令
网络命名空间是ESXCLI中最大的命名空间之一。让我们探索一下对诊断有用的命令。
- 检查活动网络连接的状态:
esxcli network ip connection list
- 查看已安装的网络适配器列表:
esxcli network nic list
- 显示网络接口的信息:
esxcli network ip interface list
- 显示服务器上存在的网络接口的IP地址信息:
esxcli network ip interface ipv4 get
- 显示VM的网络信息:
esxcli network vm list
- 查看域搜索设置:
esxcli network ip dns search list
- 查看网络设置中设置的DNS服务器:
esxcli network ip dns server list
- 列出虚拟交换机和端口组:
esxcli network vswitch standard list
- 显示vmnic0网络接口的统计信息:
esxcli network nic stats get -n vmnic0
- 检查防火墙状态和规则设置:
esxcli network firewall get
esxcli network firewall ruleset list
注意:默认的防火墙策略是如果未设置相反规则,则丢弃流量。
- 您可以暂时禁用ESXi主机上的防火墙以进行故障排除:
“`
esxcli network firewall set –enabled false
“` - 必须使用以下命令启用防火墙:
“`
esxcli network firewall set –enabled true
“`
出于安全考虑,建议您启用ESXi防火墙。
今天博客文章的网络部分考虑了许多命令。只有最基本和最流行的命令被认为是今天博客文章的网络部分。使用ESXCLI可以配置大量的网络参数,但这需要一个超出今天文章范围的详细说明。
ESXCLI存储命令
在存储命名空间中,您可以检查和编辑存储设置。
- 检查已挂载的VMFS卷的信息:
“`
esxcli storage vmfs extent list
“` - 查看VMFS文件系统到磁盘设备的映射:
“`
esxcli storage filesystem list
“` - 列出系统上所有iSCSI路径:
esxcli storage core path list
- 显示已挂载的NFS共享列表:
esxcli storage nfs list
如何使用ESXCLI检查SMART
S.M.A.R.T. is useful for disk diagnostics and for preventing disk failure. You can read the S.M.A.R.T. data and, if you discover that something is wrong with your disk, you can make a timely decision to replace the disk.
- 首先,列出所有存储设备并找到唯一的设备名称(参见下面的屏幕截图):
esxcli storage core device list
- 然后使用命令获取该磁盘设备的S.M.A.R.T.数据:
esxcli storage core device smart get -d naa.50026b7267020435
其中naa.50026b7267020435是本例中使用的设备名称。
检查iSCSI适配器列表
iSCSI是一种广泛使用的协议,用于在块级别访问共享存储,并且在ESXCLI中有一个单独的iscsi命名空间用于管理iSCSI存储。
- 显示可用的iSCSI适配器列表:
esxcli iscsi adapter list
- 重新发现并重新扫描 iSCSI 适配器:
esxcli iscsi 适配器发现重新发现 -A 适配器名称
esxcli 存储核心适配器重新扫描 -A 适配器名称
除了使用-A 适配器名称
外,您还可以使用--all
选项重新扫描所有适配器。
检查 ESXi 软件 VIB 列表
为 ESXi 设计的软件包通常以 VIB 文件(vSphere 安装包)的形式分发。VIB 文件类似于包含压缩包的容器,可以安装在系统中,包含描述符和签名文件。反过来,VIB 通常以标准 ZIP 格式的存档文件形式分发。您可能需要将 VIB 包含到 ESXi 映像中,以便使用适当的硬件或安装 VIB 以在现有系统中应用安全补丁。
- 您可以查看安装在您的 ESXi 主机上的 VIB 包列表:
esxcli 软件 vib 列表
- 您可以使用 ESXCLI 安装 VIB(ESXi 主机必须在维护模式下):
esxcli 软件 vib 安装 -d /vmfs/volumes/datastore1/patches/patch_name.zip
在 ESXCLI 中管理 VM 操作
vm 命名空间可用于对运行中的虚拟机进程进行操作。
- 检查正在运行的虚拟机列表并显示它们的World ID:
esxcli vm process list
您可以使用ESXi shell命令终止无响应的虚拟机。在这种情况下使用ESXCLI可能很有帮助,当虚拟机无法通过GUI关闭时,如VMware vSphere Client、VMware Host Client或VMware Workstation的GUI。
- 通过使用
esxcli vm process list
命令输出中显示的World ID关闭虚拟机。在当前示例中,所需VM的World ID为75498。esxcli vm process kill -w 75498 -t soft
- 如果软命令类型没有帮助,请考虑使用硬方法立即关闭虚拟机。
esxcli vm process kill -w 75498 -t hard
对于kill命令,有三个可用的命令选项:
- soft – 在客户操作系统中发送正确的信号以正确关闭虚拟机
- hard – 立即关闭虚拟机
- 强制 – 当虚拟机无法通过前两种方式关闭时,可以像断开电源线一样关闭虚拟机。只有在前两种方式不成功时才使用这种关闭虚拟机的方式。
其他有用的 ESXi Shell 命令
除了 ESXCLI 命令之外,您还可以使用许多 ESXi shell 命令:
- 从控制台打开 ESXi DCUI(通过 SSH 连接到 ESXi shell 时,颜色会有所不同):
dcui
按 Ctrl+C 返回命令提示符。
- 通过使用 vmkfstools 将粗配置的虚拟磁盘转换为薄配置的虚拟磁盘:
vmkfstools -i /vmfs/volumes/vmfs_datastore/vm_name/thick_disk.vmdk -d thin /vmfs/volumes/vmfs_datastore/vm_name/new_thin_disk_name.vmdk
在 ESXi shell 命令中,vmkfstools 是一个强大的命令,可用于执行存储操作以及管理存储设备、VMFS 卷和虚拟磁盘。在博客文章中了解有关粗配置、薄配置以及虚拟磁盘收缩的更多信息。
- 打开ESXi任务管理器:
esxtop
使用
esxtop
命令打开任务管理器后,您可以通过按相应的键在选项卡之间切换:C – CPU
I – 中断
M – 内存
N – 网络
D – 磁盘适配器
U – 磁盘设备
V – 磁盘VM
P – 电源管理
- 在当前目录中查找文件:
find . -name filename.txt
- 在您希望定位文件的目录名称处替换 `.` 字符,并将 `
filename.txt
` 替换为您的文件名。例如,如果您希望在 `/vmfs/volumes/` 目录中查找名为 `diskname.vmdk` 的文件,请运行以下命令:find /vmfs/volumes/ -name diskname.vmdk
- 打开交互式VMware控制台:
vsish
- 显示加载的vmkernel驱动程序:
vmkload_mod --list
- 检查交换分区的设置:
esxcli sched swap system get
- 您可以使用以下命令之一列出用户:
esxcli system account list
cat /etc/passwd 或 less/etc/passwd
- 您可以查看位于sbin目录中的所有ESXi命令:
ls /usr/sbin
创建新用户
至少有两种方法可以通过使用ESXi shell命令来创建新的ESXi用户。
ESXi adduser命令
- 如果您在ESXi控制台中输入
adduser
命令,您将收到以下消息:-sh: adduser: not found
- 您应该指定到适当的busybox二进制文件的完整路径来运行此命令:
/usr/lib/vmware/busybox/bin/busybox adduser
现在您可以看到此命令的使用选项。
- 最后,运行确切的命令来添加ESXi系统用户:
/usr/lib/vmware/busybox/bin/busybox adduser -s /bin/sh -G root -h / user1
其中:
-s /bin/sh是用户登录后使用的shell;
-G root – 新用户所属的组名(root组);
-h /是新用户的主目录(根目录);
user1是用户名。
- 当提示时,输入一个新密码并确认密码。
在ESXCLI中创建用户
作为替代方案,您可以使用ESXCLI通过一个命令添加新用户:
esxcli system account add -d="NAKIVO用户" -i="nakivo" -p="Password-Test321" -c="Password-Test321"
其中:
-d表示显示的描述
-p是为新用户设置的密码
-c是密码确认
在命令行中创建新用户时选择哪种方法?第二种方法中使用的单个命令可能看起来很方便,但在安全性方面并非如此。如果您还记得,在登录到ESXi shell后会显示一个警告消息:
在ESXi shell上运行的所有命令都会被记录,并可能包含在支持捆绑包中。不要在命令行上直接提供密码。大多数工具可以提示输入秘密或从标准输入接受它们。
如果您对安全性有所顾虑,请不要在命令中包含明文密码。如果需要密码,通常会在标准控制台输入中提示,并可以在控制台中输入,而不会显示密码。例如,如果您想使用ESXCLI创建一个新用户,可以使用以下命令:
esxcli system account add -d="user2" -i="user2" -p -c
系统会单独提示输入ESXi密码,并且在输入密码时不会在控制台中显示密码。
结论
VMware控制台命令可用于管理系统组件、网络、存储、VIB软件和虚拟机。在ESXi中使用命令行界面,可以获得比VMware vSphere客户端和VMware主机客户端的友好图形用户界面更多的功能。
您可以使用本地ESXi shell命令和远程ESXi SSH命令来查看和配置在GUI中隐藏或不可用的设置。使用本博客文章中提供的ESXi命令列表,进行精细的ESXi调整,并体验在VMware vSphere中使用命令行界面的额外功能。
您可以通过阅读有关PowerCLI的内容来了解更多信息,PowerCLI是另一种用于从Windows PowerShell管理VMware vSphere的命令行界面。
Source:
https://www.nakivo.com/blog/most-useful-esxcli-esxi-shell-commands-vmware-environment/