您的VMware環境中最有用的ESXCLI命令

您可以使用 VMware 提供的 vSphere Client(VMware 提供的 GUI)和 VMware vSphere Web/HTML5 Client(基于 Web 的 GUI)来管理 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 主机时,包括主机的监视器和键盘时,可以使用此方法。

  1. 在 ESXi 直接控制台用户界面(DCUI)中,转到故障排除选项,导航到启用 ESXi Shell 和启用 SSH 字符串,然后按 Enter 键以启用每个选项。ESXi 直接控制台用户界面(DCUI)故障排除选项启用 ESXi Shell启用 SSHEnter
  2. 啟用ESXi shell後,按Alt+F1在運行ESXi的機器上打開控制台。然後,輸入登錄名稱和密碼(可以使用root用戶的憑據)。
  3. 之後,您可以執行ESXi shell命令。
  4. 如果需要返回ESXi DCUI,請按Alt+F2啟用SSH選項允許您使用SSH客戶端遠程打開ESXi控制台。

通過VMware Host Client啟用對控制台的訪問

  1. 打開網絡瀏覽器,然後在地址欄中輸入您的ESXi主機的IP地址,然後登錄。
  2. 轉到主機>操作>服務,然後單擊啟用安全外殼(SSH)以啟用SSH訪問,直到ESXi重新啟動。

    同樣,您可以在服務菜單中啟用本地ESXi主機上的控制台外殼。轉到管理>服務。右鍵單擊TSM-SSH服務。點擊策略>與主機一起啟動和停止以啟用即使在ESXi重新啟動後也可以訪問SSH。

  3. 現在您可以使用 SSH 客戶端遠程連接到 ESXi 控制台。

使用 vCenter 和 VMware vSphere Client 啟用對控制台的訪問

如果您的 ESXi 主機由 vCenter Server 管理,則可以使用此方法。

  1. 在網頁瀏覽器中登錄VMware HTML5 vSphere Client
  2. 轉到主機和叢集,選擇您的 ESXi 主機。
  3. 選擇配置標籤,在系統>服務中打開,並在服務列表中點擊SSH
  4. 點擊開始以啟動 SSH 服務器,或點擊編輯啟動策略並選擇隨主機啟動和停止,如果您希望將 SSH 服務器啟用一段較長的時間。您還可以在服務菜單中啟用 ESXi shell。

啟用 SSH 訪問後,您可以使用 SSH 客戶端遠程連接到 ESXi 主機並運行 ESXCLI 命令。

通過 SSH 連接

為了通過 SSH 遠程連接到 ESXi 控制台,請在 Linux 控制台中執行以下操作。

  1. 執行以下命令:

    ssh 192.168.101.221

    ssh [email protected]

    其中192.168.101.221是此示例中使用的 ESXi 伺服器的 IP 位址。

  2. 您需要輸入 ESXi 使用者的使用者名稱和密碼(root可作為 ESXi 上的默認管理使用者)。

同样地,您可以通过命令行从一个ESXi主机连接到另一个ESXi主机。

在Windows中,您可以使用PuTTY:

  1. 打开PuTTY
  2. 输入ESXi主机的IP地址和端口。
  3. 点击打开以通过SSH连接到ESXi主机。

通过SSH连接到ESXi主机并远程运行ESXCLI命令是最常用且安全的方法。

如何在Linux中安装ESXCLI

远程运行ESXCLI命令的替代方法是在Linux上安装ESXCLI。为此必须安装Python。以下是在Linux中安装ESXCLI的主要步骤:

  1. 在进行系统更改之前备份您的Linux机器。
  2. VMware网站
  3. 下载ESXCLI的内容(以root身份运行):

    tar zxf esxcli-8.0.0-22179150.tgz -C /opt/vmware

  4. 使用以下命令运行ESXCLI安装程序:

    python setup.py install

  5. 嘗試連接到 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(不受信任)

  6. 要解決此問題,請使用指定的用戶名、密碼和前一個輸出消息中顯示的指紋運行命令:

    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是位於/sbin/目錄中的Python腳本。如果您想要查看腳本的內容,您可以使用內置的文本編輯器vi

基本上,ESXCLI的語法如下:

esxcli [選項] {命名空間}+ {cmd} [cmd 選項]

因此,ESXCLI由主要類別(命名空間)的分支組成。請注意,esxcli命令區分大小寫,與ESXi中使用的其他控制台命令類似。運行命令後顯示所有可用ESXCLI命名空間和命令的完整列表:

esxcli esxcli 命令列表

可用的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 以查看 network 命名空間的所有可用命令

然後輸入:

esxcli network vm 以檢查 vm 命名空間的命令。

ESXCLI 日誌文件位於 /var/log/esxcli.log

如果 ESXCLI 命令未成功執行,則數據將寫入此文件。如果 ESXCLI 命令成功運行,則不會將任何內容寫入此日誌文件。

有用的 ESXCLI 命令

現在您已經熟悉 ESXCLI 命令的基本工作原理,讓我們來看看在 VMware vSphere 中可以使用的有用命令的具體示例。本文考慮的 ESXCLI 命令列表分為與命名空間名稱相等的類別。

用於檢查 ESXi 中硬件詳細信息的命令

通過使用 硬件 命名空間,您可以查看有關已安裝設備的完整信息。

  • 為了查看已安裝的 PCI 設備,運行以下 ESXCLI 命令:

    esxcli hardware pci list | more

  • 檢查已安裝在 ESXi 伺服器上的內存量:

    esxcli hardware memory get

  • 查看有關已安裝處理器的詳細信息:

    esxcli hardware cpu list

ESXCLI 系統命令

在此部分,您可以看到 系統 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系統關機重新啟動 -d 60 -r“安裝補丁”

    在此示例中,延遲為60秒。

另一個命令是設置自定義歡迎消息,而不是顯示標準背景屏幕,該屏幕顯示了陰影不活動的主菜單,其中顯示了“<F2>自定義系統/查看日誌 <F12>關機/重新啟動”提示和管理主機的IP地址。請注意,設置自定義歡迎消息後,您將只在黑屏上看到此設置消息。您可以手動輸入“按F2”以避免混淆。

  • 當用戶未登錄時,自定義消息可用於在連接到ESXi主機的顯示器上隱藏有關ESXi主機的信息。

    esxcli系統welcomemsg set -m="歡迎來到NAKIVO!按F2"

  • 驗證歡迎消息是否已設置:

    esxcli系統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

  • 顯示虛擬機的網絡信息:

    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.

  1. 首先,列出所有存儲設備並找到唯一的設備名稱(參見下圖):

    esxcli storage core device list

  2. 然後使用命令獲取該磁盤設備的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 adapter discovery rediscover -A adapter_name

    esxcli storage core adapter rescan -A adapter_name

除了-A adapter_name,您還可以使用--all選項重新掃描所有適配器。

檢查ESXi軟件VIB列表

用於ESXi的軟件包通常以VIB文件(vSphere安裝捆綁包)的形式分發。VIB文件類似於包含可以安裝在系統中的壓縮包的容器,帶有描述符和簽名文件。反過來,VIB通常以標準ZIP格式的存檔文件形式分發。您可能需要將VIB包含在ESXi映像中,以便使用適當的硬件或在新系統中安裝VIB以應用安全修補程序。

  • 您可以查看安裝在ESXi主機上的VIB包列表:

    esxcli software vib list

  • 您可以使用ESXCLI安裝VIB(ESXi主機必須處於維護模式):

    esxcli software vib install -d /vmfs/volumes/datastore1/patches/patch_name.zip

使用ESXCLI管理VM操作

vm 命名空間可用於處理運行中的虛擬機器進程。

  • 檢查運行中虛擬機器的列表並顯示它們的世界 ID:

    esxcli vm process list

您可以使用 ESXi shell 命令終止無回應的虛擬機器。在無法使用 GUI 關閉 VM 的情況下,例如 VMware vSphere Client、VMware Host Client 或 VMware Workstation 的 GUI,使用 ESXCLI 可能很有幫助。

  • 使用 esxcli vm process list 命令的輸出中顯示的 World ID 關閉 VM。在當前示例中,所需 VM 的 World ID 為 75498。

    esxcli vm process kill -w 75498 -t soft

  • 如果 soft 命令類型無效,請考慮使用 hard 方法立即關閉 VM。

    esxcli vm process kill -w 75498 -t hard

對於 kill 命令有三種可用的命令選項:

  • soft – 發送正確的信號在客戶操作系統中正確關閉 VM
  • hard – 立即關閉 VM
  • 強制當前 VM 被關閉,類似於拔掉電源電纜時電腦被關閉。只有在前兩種方法都失敗時才使用這種方式關閉 VM。

其他有用的 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 user" -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 Client和VMware Host Client的圖形用戶界面,還能提供更多功能。

您可以在本地使用ESXi shell命令,或通過ESXi SSH命令遠程查看和配置在圖形用戶界面中隱藏或不可用的設置。使用本博客文章提供的ESXi命令列表進行精細調整,體驗在VMware vSphere中使用命令行界面的額外功能。

您可以通過閱讀有關PowerCLI的信息來了解更多,這是另一種用於從Windows PowerShell管理VMware vSphere的命令行界面。

Source:
https://www.nakivo.com/blog/most-useful-esxcli-esxi-shell-commands-vmware-environment/