2013年10月18日 星期五

用 VRDP 連線 VirtualBox 虛擬機(二):密碼認證

當 VirtualBox 「虛擬機」以 headless 模式啟動時,若沒有額外的連線是看不到螢幕。在這種時候除了使用「虛擬機」內的系統所提供的「遠端桌面」(如:VNC, Remote desktop)外,最常使用的就是 VirtualBox 自帶的 VRDP。
  新版 VirtualBox 在連線時,已不能使用 Fedora 收錄之 rdesktop 了,須使用 VirtualBox 附帶的 rdesktop-vrdp,詳情請參考之前的發文『解決「不能以 rdesktop 連接遠端的 VirtualBox 虛擬機」的問題』。關於 rdesktop-vrdp(註:使用 VRDP 協定)的連線認證機制有數種,列表說明如下:
VRDP 認 證 機 制說   明
方 法驗證程式庫
null (無)無認證機制。任何客戶皆可順利與 VRDP 伺服器建立連線。
注意:除非在私有網路環境中,否則不建議使用之。
external

(外部)
VBoxAuth使用的 VBoxAuth 驗證程式庫提供之認證機制,由「虛擬機」所在「主機電腦」之作業系統來完成認證。
注意:啟動「虛擬機」的帳號之密碼,即為認證密碼。
VBoxAuthSimple使用附帶的 VBoxAuthSimple 驗證程式庫,認證的密碼設定在「虛擬機」設定檔 (XML) 中名稱為 "extradata" 小節中。
注意:與「虛擬機」及「主機電腦」帳號之密碼無需相關。
guest (客戶)由「虛擬機」內的作業系統認證,須經由 Guest Additions 中的一個元件將認證轉由「虛擬機」內的系統以完成認證。
注意:目前尚在測試階段,暫未完全支援此認證機制。

由上表可知,目前較能使用的認證機制只有兩種:external 的 VBoxAuth 及 VBoxAuthSimple,以下就這兩種認證機制的設定、使用做個說明。

一、設定 VirtualBox 的 external(外部)驗證程式庫

啟動『VirtualBox 管理員』從《檔案》→《喜好設定》會出現一個『VirtualBox 設定值』的視窗,點選左欄的《一般》項目,在右欄可以設定使用之『VRDP 驗證程式庫』。
這個設定值是給同一個使用者帳號內的 VirtualBox「虛擬機」的《遠端顯示》之用,當個別「虛擬機」設定之《顯示》→《遠端顯示》的《□ 啟用伺服器》被打勾,且《驗證方法》選用《外部》時,認證機制將採用 VBoxAuth 這個驗證程式庫。
  如果想將 VRDP 驗證程式庫改為 VBoxAuthSimple,將 VBoxAuth 改為 VBoxAuthSimple 再按【確定】即可。也可以用命令來設定,
[SiB@Core-i7 ~]$ VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"

二、「虛擬機」使用 external(外部)之 VBoxAuth 驗證程式庫

當「虛擬機」設定之《顯示》→《遠端顯示》啟用伺服器功能,而驗證方法設為『 外部 』時,在第一段『一、設定 VirtualBox 的 external(外部)驗證程式庫』所設的驗證程式庫會被選用來執行認證。

也可用『文字命令』做這個設定,
[SiB@Core-i7 ~]$ VBoxManage modifyvm VM_test --vrdeauthtype external
其中,『 modifyvm 』是 VBoxManage 修改「虛擬機」參數的次命令,『 --vrdeauthtype external 』是將「虛擬機」的『遠端顯示』的認證模式設為『 外部 』的參數。
  設定完成後,即可啟動「虛擬機」並執行遠端連線,接下來是以啟動 headless 模式的「虛擬機」為例。
[SiB@Core-i7 ~]$ VBoxManage startvm VM_test --type headless
其中,『 VM_test 』是虛擬機的名稱,『 -type headless 』是開啟「虛擬機」的模式之參數。要回傳「虛擬機」啟動後的訊息,可用另一個命令,有助於瞭解啟動的過程。
[SiB@Core-i7 ~]$ VBoxHeadless --startvm VM_test [SiB@Core-i7 ~]$ VBoxHeadless -startvm VM_test [SiB@Core-i7 ~]$ VBoxHeadless -s VM_test
Oracle VM VirtualBox Headless Interface 4.3.0
(C) 2008-2013 Oracle Corporation
All rights reserved.

VRDE server is listening on port 3389.
上例中三個命令都是同樣動作,出現版權宣告及所用的通訊埠後,畫面會停住不動。
  若在文字模式連線(如 SSH),不知道欲啟動的「虛擬機」名稱,可以用這個命令查詢。
[SiB@Core-i7 ~]$ VBoxManage list vms
"VM_test" {36b0cb77-4c36-4821-ae53-641d10474e96}
"VM_test_2" {36b0cb77-4c36-4821-ae53-641d10474e96}
 . . . . .
接著在「客戶端」啟動 VRDP 遠端連線。
[SiB@Celeron-D ~]$ rdesktop-vrdp 192.168.10.17:3389 -p test
ERROR: Failed to open keymap en-us
WARNING: Remote desktop changed from 800x600 to 1280x948.
其中,『 -p test 』是連線時加上的密碼(例子中是假設帳號密碼為 test)的參數。接著出現的兩列文字是連線時的訊息,不必理會也可以正常連線。
  如果不想讓密碼留在記錄中,可以用詢答方式鍵入密碼。
[SiB@Celeron-D ~]$ rdesktop-vrdp 192.168.10.170:3389 -p -
Password:
ERROR: Failed to open keymap en-us
WARNING: Remote desktop changed from 800x600 to 720x400.
WARNING: Remote desktop changed from 720x400 to 1280x948.
上例中,在 Password: 提示字之後使用者鍵入密碼。接著出現的三列文字是連線時的訊息,不必理會也可以正常連線。

:訊息中的 ERROR: 這個錯誤,應該處理一下比較好。不過,既然暫時不影響運作,有空再研究它。而 WARNING: 這兩個警告,只是桌面調整的訊息而已。

三、「虛擬機」使用 external(外部)之 VBoxAuthSimple 驗證程式庫

如果不想用帳號密碼做為 VRDP 的連線密碼,而又想在連線時加上認證機制,可考慮使用 VBoxAuthSimple 驗證程式庫。請參考第一段『一、設定 VirtualBox 的 external(外部)驗證程式庫』的設定操作。
  在「虛擬機」設定之《顯示》→《遠端顯示》啟用伺服器功能,而 VRDP 驗證方法一樣設為『 外部 』,VBoxAuthSimple 驗證程式庫就會被選用來執行認證。
  要先將用以認證 VRDP 遠端連線的密碼加密,
[SiB@Core-i7 ~]$ VBoxManage internalcommands passwordhash "SiBtest"
Password hash: a55db3d04c7b3e8de23c0e9a9c6fe1efa862897df3dcadda6c79329dc12dd6b0
其中,『 SiB 』是待加密的密碼,而命令回應的一大串文數字就是密碼加密後的 16 進位密文。接著要將密文存在「虛擬機」的設定中,
[SiB@Core-i7 ~]$ VBoxManage setextradata VM_test "VBoxAuthSimple/users/SiB" a55db3d04c7b3e8de23c0e9a9c6fe1efa862897df3dcadda6c79329dc12dd6b0
這個命令是將「虛擬機」VM_test 與其所在的帳號名稱 SiB 綁在一起。使用者以 VRDP 登入時,會由連入的埠號對應到該「虛擬機」,又因該「虛擬機」是由 SiB 所啟動,故剛才存入的密文就會被 VBoXAuthSimple 驗證程式庫用來認證。

:若是「虛擬機」是開啟給別人登入使用,採用 VBoxAuthSimple 驗證程式庫,因為不用將帳號的密碼告訴別人,使用上較安全些。

四、關閉 headless 模式的「虛擬機」

最後,當「虛擬機」使用後要將之關閉,關閉的方法也有好幾個:
  • 在「虛擬機」中執行關機命令,如同一般關機步驟,只是在「虛擬機」中系統操作。
  • 從『 VM VirtualBox 管理員』的「虛擬機」清單下關機命令。
  • 用文字命令,直接在「終端機」下關機命令,
[SiB@Core-i7 ~]$ VBoxManage controlvm VM_test acpipowerbutton

經驗分享:

  • 依照上述步驟設定後,卻仍不能連線?
    解法:將「虛擬機」的《顯示》→《遠端顯示》→《□啟用伺服器》先關閉再打開。

已測試版本:

  • 主  機:Fedora 19  +  VirtualBox 4.3  +  Extension Pack 
  • 虛  擬  機:Fedora 19  +  VirtualBox Guest Additions 4.3
  • 本地電腦:Fedora 19  +  VirtualBox 4.3

參考資料:

2 則留言:

  1. ERROR: Failed to open keymap en-us
    Hi,关于这个问题,你那边解决了吗?这个问题好像有点严重,普通键盘的方向键没有反应,小键盘无法打出数字,却可以当方向键使用,如果你有什么解决方法,请告诉我一下,谢谢

    回覆刪除
    回覆
    1. 目前我也找不到解決辦法,有空將繼續嘗試。

      刪除

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)