VNC是一款基于 UNIX 和Linux 操作系統的免費開源軟件,是基于RFB協議進行通信的。RFB是一個基于TCP的應用層協議,是一個遠程圖形用戶的、與平臺無關的、簡單顯示協議的超級瘦客戶系統,遵守RFB協議的RFB客戶端是一個無狀態的客戶端。是服務器虛擬化產品VMware vSphere,都可以通過VNC客戶端對虛擬機遠程管理和維護。
在VMware官方網站提供的手冊里面,很少提及VNC,但在官方網站提供的“VMware Knowledge Base”(VMware知識庫)中,有不少關于VNC的內容。例如,在“訪問VMware vCenter Server、VMware ESXi和ESX主機以及其他網絡組件所需的TCP和 UDP端口(2081930)”頁面中,列出了VMware所需要的各類端口,其中就包含“5900到5964”端口,將其用途標識為“管理工具使用的RFB協議,如 VNC”。
在使用vSphere Web Client等工具連接vCenter或ESXi主機后,有時會出現“無法打開MKS:內部錯誤(Unable to open MKS:Internal Error)”“無法連接到MKS(Unable to connect to MKS)”“解析服務器VNC數據流時,客戶端出錯”等錯誤消息。
如果打開虛擬機目錄中的“/vmfs/volumes/datastore/virutal_machine/vmware.log”文件,可以看到文件內容里面有類似“
由此可見,VMware早已把VNC集成到了自己的產品中,無論是桌面虛擬化產品 VMware Workstation,還
用VMware Workstation打開虛擬機,單擊“虛擬機→設置”。
出現“虛擬機設置”對話框后,單擊“選項”,在左側設置選項清單中,選擇“VNC連接”,在右側勾選“啟用VNC連接”,指定訪問虛擬機的遠程端口號,本例輸入的是“5901”。在“密碼”和“確認”文本框中指定遠程訪問的密碼。
說 明:VMware在 編 碼為“2081930”、標題為“訪問VMware vCenter Server、VMware ESXi和ESX主機以及其他網絡組件所需的TCP和UDP端口”的知識頁面中,已經指出VNC的端口范圍“5900-5964”,因此,此處輸入的端口號必須在此范圍內。
開啟VNC連接后,運行VNC客戶端程序,筆者用的是TightVNC。
打開TightVNC窗口后,在“Remote Host”(遠程主機)文本框中輸入VNC服務器的IP地址及端口號,單擊“Connect”(連接)按鈕。
注意:此處輸入的遠程主機地址不是虛擬機的IP地址,而是主機的IP地址,端口號是在開啟虛擬機VNC連接功能時設置的端口號。
出現“Vnc Authentication”(VNC 認證)對話框后,輸入開啟虛擬機VNC連接時設置的密碼。
使用VNC客戶端遠程連接到虛擬機后的效果如圖1所示,此時可以像遠程桌面連接那樣遠程超控虛擬機。
VMware提供的VNC連接允許多個終端同時連接到同一臺VNC服務器(VMware虛擬機),而且這些終端可以是PC機,也可以是手機這樣的移動終端。VNC客戶端程序也可以不同。下面用Android(安卓)系統的手機,嘗試在手機上用VNC客戶端遠程連接到VMware虛擬機。
(1)通過應用商店下載并安裝一個VNC客戶端,筆者安裝的VNC客戶端是“VNC Viewer”。
(2)打開 VNC Viewer,此時“Address Book”(地址簿)是空的,點擊右下角的“+”按鈕,增加一個VNC連接地址。
(3)出現“New connection”(新連接)對話框,輸入VNC服務器的地址及端口。此處的地址仍是主機地址,不是虛擬機地址,端口號是為虛擬機開啟VNC連接時設置的端口號。然后給這個新連接取一個名字。
(4)回到剛創建的連接后,點擊屏幕下方的“Continue”。
(5)彈出“Unencrypted connect”(未加密的連接)對話框后,詢問是否繼續連接,單擊“OK”按鈕繼續連接。

圖1 使用VNC客戶端遠程連接到虛擬機效果

圖2 在手機上遠程控制虛擬機的效果
說明:VMware提供的VNC連接功能是非加密連接,此處的非加密連接,是指通過VNC連接發送的數據未加密,而不是認證是需要輸入密碼就是加密連接了,也就是說,登錄VNC的安全認證和VNC連接加密是兩回事。
(6)出現“Authentiction”(認 證)對話框,輸入密碼后,點擊“Continue”繼續。
VNC連接認證成功后,就可以連接到VNC服務器了,在手機上遠程控制虛擬機的效果如圖2所示。
VMware不僅提供為虛擬機提供了基于VNC的遠程連接功能,還提供了VNC連接查看工具。參照開啟虛擬機VNC連接功能的操作步驟,進入VNC連接設置頁面,單擊“查看VNC連接”按鈕,可了解有哪些終端在遠程控制這臺虛擬機。
打開“VNC連接”對話框后,可以通過連接列表中了解哪些終端設備遠程連接到了這臺虛擬機。具體信息包括終端設備(主機)的名稱、IP地址、已連接時間和空閑時間。
VMware vSphere并不像VMware Workstation那 樣,在虛擬機設置里面有“啟用VNC連接”的選項,要啟用虛擬機的VNC連接功能,需手動配置虛擬機參數。同時,還要修改ESXi主機的防火墻規則,讓ESXi主機的防火墻允許其他終端設備通過VNC協議連接到虛擬機。因此,開啟VMware vSphere虛擬機VNC遠程連接功能的過程,比開啟VMware vSphere虛擬機VNC遠程連接功能要復雜一些。
SSH是安全外殼協議(Secure Shell)縮寫,是一種專為遠程登錄會話和其他網絡服務提供安全性的協議,利用SSH可以有效防止遠程管理過程中的信息泄露問題。在本案例中,需要啟用ESXi主機的SSH,通過SSH修改ESXi主機的防火墻規則。
可以在配置ESXi主機的時候開啟SSH,也可以使用vSphere Web Client、vSphere Client等工具,連接到ESXi主機后,再通過配置ESXi主機來開啟SSH。
(1)直接在ESXi主機上開啟SSH
(在ESXi主機上操作)進入ESXi主機系統配置頁面,在系統配置選項中選擇“Troubleshooting Options(故障排除選項)”。
進 入“Troubleshooting Mode Options”(故 障 排除模式設置)頁面后,選中“Enable SSH”并回車,即可開啟ESXi主機的SSH。
(2)使 用 vSphere Client開啟ESXi主機的SSH
用vSphere Client打開ESXi主機,單擊“配置”選項卡,在窗口左下側“軟件”欄目下找到并選擇“安全配置文件”選項,此時窗口右側會出現安全配置文件的一些參數,主要是服務和防火墻兩大類參數。SSH屬于服務類,此時單擊“服務”右側的“屬性”按鈕。
出現“SSH(TSM-SSH)選項”對話框后,勾選“與主機一起啟動和停止”,單擊“啟動”按鈕即可開啟ESXi主機的SSH。
開啟ESXi主機后,就可以使用SecureCRT之類的終端仿真程序登錄ESXi主機。
(1)運行 SecureCRT,首次運行SecureCRT,會彈出“快速連接”對話框,此時在“主機名”文本框中輸入ESXi主機的IP地址,在“用戶名”文本框中輸入登錄ESXi主機的用戶名,其他參數取默認值即可。
(2)出現“新建主機密鑰”對話框后,單擊“接受并保存按鈕”。
(3)出現“Keyboard Interactive Authentication”(鍵 盤 交互認證)對話框后,輸入登錄ESXi主機的密碼。
(4)用SecureCRT登錄到ESXi主機后,就可以根據需求,遠程配置ESXi主機和ESXi主機交換文件了。在本例中,用SecureCRT登錄ESXi主機的主要目的是配置防火墻規則,讓VNC終端能夠遠程訪問控制ESXi主機下的虛擬機。為了便于創建防火墻規則,可以提前用記事本或Adobe Dreamweaver創建防火墻規則文件。在本例中,創建的防火墻規則文件的文件名是“VNC.XML”,內容如下:


簡單說明一下上述防火墻規則:“”是規則 名“VNC”;“”是入站規則,規則協議是TCP,入站端口范圍是“5900-5964”。“”是出站規則。
(5)回到SecureCRT窗口后,單擊SecureFX圖標按鈕,打開 SecureFX。SecureFX是一款支持普通FTP標準和安全數據傳輸標準(SFTP或者在SSH2上的FTP)的FTP客戶端軟件,在本例中,需要用它將防火墻規則文件上傳到ESXi主機“/etc/vmware/firewall”文件夾下。
(6)盡 管是 通 過SecureCRT調用的SecureFX,但是用SecureFX登錄ESXi主機仍需登錄驗證,此時會彈出驗證對話框。SecureFX會沿用SecureCRT登錄的主機地址和用戶名,此時只輸入密碼即可。
(7)SecureFX的 界 面和資源管理器有些類似,用SecureFX登錄到ESXi主機后,用拖拽的方法,將創建好的防火墻規則文件“VNC.XML”上傳到ESXi主機“/etc/vmware/firewall”文件夾中。
(8)將防火墻規則文件上 傳 到ESXi主 機“/etc/vmware/firewall”文 件 夾后,回到SecureCRT窗口,輸入命令“esxcli network firewall refresh”,更新防火墻規則。再用命令“esxcli network firewall ruleset list | grep VNC”檢測所創建的防火墻規則是否有效。
如果檢查結果列表有“VNC true”,說明防火墻規則配置成功,否則需要仔細檢查規則,找出并修正其中的錯誤,再上傳更新。
(1)用vSphere Client(用 vSphere Web Client或VMware Workstation Pro也可)連接到ESXi主機,關閉需要開啟VNC連接功能的虛擬機,編輯虛擬機,單擊“選項”選項卡,在設置列表中找到并選擇“常規”,在右側“配置參數”欄單擊“配置參數按鈕”。
(2)出現“配 置 參數”對話框后,先看看參數列表中是否有“RemoteDisplay.vnc.enabled”、“RemoteDisplay.vnc.password”、“RemoteDisplay.vnc.port”三項參數,如果沒有,可單擊“添加行”按鈕添加這三個參數。配置參數時,請按以下參數值配置參數。
RemoteDisplay.vnc.enabled= true
RemoteDisplay.vnc.password=
RemoteDisplay.vnc.port=

圖3 用TightVNC Viewer連接到VMware vSphere虛擬機的效果
注意:VMware所提供的配置參數功能只能修改或添加參數,不能刪除參數,因此,在配置參數前,一定要檢查現有的參數,查看參數列表里面是否有需要配置的參數,如果沒有才添加。
開啟虛擬機VNC連接后,就可以用VNC客戶端連接到此虛擬機了。具體連接方法可以參考前面“VMware workstation桌面虛擬機VNC遠程控制實戰”的內容。在本例中,用TightVNC Viewer連接到VMware vSphere虛擬機的效果如圖3所示。
VMware已經提供了vSphere Web Client、vSphere Client、VMware Workstation等功能強大的虛擬機遠程管理運維工具,也提供了在移動終端上使用的虛擬機遠程運維管理工具VMware View Client,為 什么還要用VNC遠程連接到虛擬機呢?
其實,VMware提供的這些工具應用范圍還是有限的,以Android移動終端為例,有的終端無法安裝View Client,還有的終端設備用View Client遠程連接不到虛擬機。對使用桌面系統的用戶來講,VNC客戶端所占資源比vSphere Client小很多,用VNC客戶端遠程連接虛擬機可能比vSphere Client便捷得多。在非正式場合,用VNC遠程連接到虛擬機,也是一種補充辦法。
基于VNC技術遠程管理運維虛擬機有其他遠程控制方式不可比擬的優勢,例如,用它可以遠程修改CMOS設置,可以安裝操作系統,可以遠程調試啟動過程……,只要虛擬機電源處于開機狀態,就可以用VNC客戶端遠程連接到虛擬機,而不用擔心VNC服務器是否在運行。