console

HTML5 Console Access from Windows PC (Under Investigation)

以前のエントリーでも紹介していますが、vSphere 5.5 の vSphere Web Client からは Mac OS もサポートされています。Windows や Linux では vmware-vmrc という仮想マシンのコンソール アクセス用のバイナリが提供されていますが、Mac OS 用には提供されていません。Mac OS からアクセスした場合には、HTML5 ベースのコンソールがブラウザー内で動作します。 VMRC SDK にも記述はないので、まぁお察しください。

HTML5 ベースのコンソール

HTML5 ベースのコンソールは、Mac OS 上のブラウザーで vSphere Web Client にログインした後、仮想マシンの「コンソールの起動」をクリックすることでアクセスできます。

新しいタブ/ウィンドウが開き HTML5 ベースのコンソールが表示されます。

コンソールに関わるボタンが「Send Ctrl+Alt+Del」だけで、「Power On」「Power Off」「Reset」「Mount ISO/FD」などがないのが寂しいところですが、仕様なので仕方ないでしょう。

今回のポイントはコンソール アクセスのウィンドウの URL です。vCenter Server のポート 7331 に HTTP アクセスしています。vSphere Web Client はポート 9443 ですので、コンソールは vSphere Web Client とは別に扱われていそうです。私の環境は vCenter Server Appliance で構成されていますので、アプライアンスにログインしてポート 7331 を利用しているプロセスを lsof で確認してみます。

vc-l-01sp:~ # lsof -i:7331
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    5787 root   21u  IPv6  20543      0t0  TCP *:7331 (LISTEN)
java    5787 root   76u  IPv6 939059      0t0  TCP vc-l-01sp.yyy.zzz:7331->aa.bb.cc.dd:64146 (ESTABLISHED)
vc-l-01sp:~ # ps -ef | grep 5787
root      5787  5034  0 12:03 ?        00:00:19 /usr/java/jre-vmware/bin/java -Djetty.port=7331 -jar start.jar -Xss1024k -Xms1024m OPTIONS=Server,websocket
root     13209 12376  0 12:38 pts/0    00:00:00 grep 5787
vc-l-01sp:~ #

なぜ Jetty … というツッコミはありますが、この Jetty が使っている他のポートを確認してみます。

vc-l-01sp:~ # lsof -n -P -p 5787 | grep TCP
java    5787 root   21u  IPv6              20543      0t0    TCP *:7331 (LISTEN)
java    5787 root   76u  IPv6             939059      0t0    TCP aa.bb.cc.dd:7331->ww.xx.yy.zz:64146 (ESTABLISHED)
java    5787 root   80u  IPv6             939064      0t0    TCP aa.bb.cc.dd:34321->AA.BB.CC.DD:902 (ESTABLISHED)
java    5787 root   86u  IPv6             544211      0t0    TCP 127.0.0.1:60056->127.0.0.1:443 (ESTABLISHED)
java    5787 root   87u  IPv6             544228      0t0    TCP aa.bb.cc.dd:33523->AA.BB.CC.DD:902 (CLOSE_WAIT)
vc-l-01sp:~ #

aa.bb.cc.dd は vCenter Server の IP アドレス、AA.BB.CC.DD は vSphere ESXi の IP アドレスになります。おそらく Jetty は、vCenter Server (vpxd) のポート 443 への API 用接続と、vSphere ESXi のポート 902 への VNC アクセスを持っていると推察できます。 また、コンソール アクセスのウィンドウの URL の GET アトリビュートを見てみると

  • vm-id (仮想マシンの Managed Object Reference ID)
  • vmName (仮想マシン名)
  • host (vCenter Server のアドレス)
  • sessionTicket (MKS チケットと vCenter Server の証明書の Thumbprint)
  • thumbprint (vCenter Server の証明書の Thumbprint)

といったパラメータを確認できます。(Thumbprint は MKS チケットの Thumbprint ではないことに注意) ここまで分かれば Windows からでも HTML5 コンソールに接続できるのでは?と妄想してみます。

Windows PC から HTML5 コンソールへのアクセスにチャレンジ

クライアント偽装 (NG)

User-Agent を誤魔化せば…とやってみたものの、JavaScript 内で Runtime を見ている模様。

PowerCLI からのアクセス (NG)

上記のパラメーターを PowerCLI で取得して、Firefox を起動してみます。

$VCenter = "vc-l-01sp"
$VCenterThumbprint = "AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP:QQ:RR:SS:TT"
Add-PSSnapin VMware.VimAutomation.Core
Connect-VIServer $VCenter -User XXXX -Password XXXX

$Vm = Get-VM polaris

$Ticket = $Vm.ExtensionData.AcquireTicket("mks")

$VmName = $Vm.Name
$VmId = $Vm.ExtensionData.MoRef.Value
$VmHost = $VCenter
$SessionTicket = "cst-VCT-" + $Ticket.Ticket + "--tp-" + $VCenterThumbprint.Replace(":", "-")
$Thumprint = $VCenterThumbprint

$URL = "http://"+$VCenter+":7331/console/?vmId="+$VmId+"&vmName="+$VmName+"&host="+$VCenter+"&sessionTicket="+$SessionTicket+"&thumbprint="+$VCenterThumbprint

& 'C:Program Files (x86)Mozilla Firefoxfirefox.exe' $URL

残念ながら、接続に失敗してしまいます。vCenter 側のログには以下のエラーが出力されます。 /var/log/vmware/vsphere-client/logs/vsphere_client_virgo.log

[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                        Aug 24, 2014 2:16:31 PM com.vmware.mks.AuthdAdapterServlet retrieveMksTicket
[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                        SEVERE: com.vmware.vim.binding.vim.fault.InvalidLogin:
[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                        inherited from com.vmware.vim.binding.vim.fault.VimFault:
[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                        inherited from com.vmware.vim.binding.vim.fault.InvalidLogin: Cannot complete login due to an incorrect user name or password.
[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                        2014-08-24 14:16:31.025:WARN:oejs.ServletHandler:/console/authd
[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                        java.lang.NullPointerException
[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                         at com.vmware.mks.AuthdAdapterServlet.doWebSocketConnect(AuthdAdapterServlet.java:135)
[2014-08-24 14:16:31.026] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.websocket.WebSocketFactory.acceptWebSocket(WebSocketFactory.java:328)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.websocket.WebSocketServlet.service(WebSocketServlet.java:97)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:648)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:534)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
[2014-08-24 14:16:31.027] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.Server.handle(Server.java:365)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
[2014-08-24 14:16:31.028] [ERROR] Thread-42                     System.err                                                         at java.lang.Thread.run(Unknown Source)

authd は vSphere ESXi でポート 902 の認証を司っているコンポーネントなので、Ticket あたりを間違えているのか…。

おわりに

Firebug などを使って、もうちょっと調べてみたいところです。

関連記事

  1. vsphere

    備忘録: 真なるクローニングに向けて

    vSphere では、クローンを行っても、全く同じ仮想マシンが出来…

  2. netapp

    NetApp Clustered DataONTAP command lines

    はじめにVirtual Volumes の挙動を Nested E…

  3. host profiles

    Host Profiles 抽出時のエラー回避方法 / How to avoid an error …

    ホスト プロファイルは ESXi ホストの構成に変更がないかどうか…

  4. vsphere

    Guest OS Customization for CentOS 7.0

    まとめvCenter Server 6.0 で CentOS 7.…

  5. powercli

    VMware PowerCLI 6.5.1 のアンインストール

    まとめMSI パッケージではないので、アンインストールはコントロ…

  6. netapp

    Enjoy extremely fast cloning with NetApp VAAI-NAS

    まとめVirtual Storage Console をインスト…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。










  1. vmware

    PowerPoint for Mac の無限 AutoRecovery を止める…
  2. powercli

    Details of host Advanced settings
  3. GCP

    gcloud コマンドで Project の一覧を表示
  4. certificates

    備忘録:自己証明書の有効期限の指定方法
  5. powercli

    Onyx for the Web Client
PAGE TOP
Translate »