noVNC是一個HTML5 VNC客戶端,采用HTML5 websockets、Canvas和JavaScript實現,noVNC被普遍應用於各大雲計算、虛擬機控制面板中,比如OpenStack Dashboard 和 OpenNebula Sunstone 都用的是 noVNC。前面說了 noVNC 采用 WebSockets 實現,但是目前大多數 VNC 服務器都不支持 WebSockets,所以 noVNC 是不能直接連接 VNC 服務器的,怎么辦呢?這就需要一個代理來實現websockets和tcp sockets之間的轉換,這個代理就是websockify。
使用noVNC遠程訪問多個遠程主機,拓撲結構如下。
只需要一台機器作為noVNC代理,其他被訪問的機器安裝VNC server就可以了。
vncserver安裝和使用
主機Target2
Target2主機是CentOS操作系統,可以使用tigervnc-server作為VNC server。
安裝:
[root@localhost Desktop]# yum install tigervnc-server -y
安裝完后,查看vncserver的配置文件:
[root@localhost Desktop]# rpm -qc tigervnc-server
/etc/sysconfig/vncservers
在該配置文件中可以修改vncserver的配置,比如遠程桌面的sessionnumber,登錄時的用戶名,屏幕分辨率等等。
啟動sncserver:
vncserver
或
vncserver :n
這里的n就是sessionnumber,不指定的話默認為1,第一次啟動時會提示輸入密碼,以后也可以使用vncpasswd命令修改密碼。VNC的默認端口號是5900,而遠程桌面連接端口號則是5900+n。如果使用“vncserver :1”命令啟動VNC Server,那么端口應該是5901。
查看連接:
[root@localhost Desktop]# vncserver -list
TigerVNC server sessions:
X DISPLAY # PROCESS ID
:2 2968
:1 2680
[root@localhost Desktop]#
我這里建立了兩個vnc連接,端口號分別是5902和5901。
如果想要刪除連接,使用:
vncserver -kill :n
主機Target1
Target1主機是Windows Server 2008 r2操作系統,可以使用tigervnc-server作為VNC server。
直接安裝即可。
安裝完成后,配置,設置連接vnc server密碼等:
使用noVNC連接VNC server
noVNC原理
noVNC提供一種在網頁上通過html5的Canvas,訪問機器上vncserver提供的vnc服務,需要做tcp到websocket的轉化,才能在html5中顯示出來。網頁就是一個客戶端,類似win下面的vncviewer,只是此時填的不是裸露的vnc服務的ip+port,而是由noVNC提供的websockets的代理,在noVNC代理服務器上要配置每個vnc服務,noVNC提供一個標識,去反向代理所配置的vnc服務。
noVNC安裝和使用
安裝noVNC
Node1上安裝noVNC,如果Node1沒有安裝git,先安裝git
[root@localhost Desktop]# yum install git -y
安裝noVNC
[root@localhost ~]# git clone git://github.com/kanaka/noVNC
使用token
為什么使用token?
我們想通過noVNC訪問局域網中的所有機器,難道要給每一台機器都安裝配置noVNC,然后用每台機器的IP地址去訪問它嗎?顯然這種做法是繁瑣笨拙的。實際上,我們只需要一台機器作為noVNC代理,其他被訪問的機器安裝VNC server就可以了。
在上圖中,我們用一台機器作為代理,IP:10.70.117.190,另外兩台機器Target1:10.70.117.181和Target2:10.70.117.183上面安裝vncserver,我們怎么通過代理去訪問Target1和Target2呢?這就需要token大顯身手了。
我們需要在代理機器上創建一個token配置文件,/root/noVNC/token/token.conf文件內容為:
target1: 10.70.117.181:5900
target2: 10.70.117.183:5902
Target1的主機ip是10.70.117.181,vnc連接端口是5900,Target2的主機ip是10.70.117.183,vnc連接端口是5902。
然后在代理機器Node1上輸入命令:
[root@localhost noVNC]# ./utils/websockify/websockify.py --web ./ --target-config=./token/token.conf 6080
現在一切就緒,可以使用瀏覽器實現遠程桌面了。
注:記得關閉防火牆,或設置防火牆端口例外。
遠程桌面到Target1
在瀏覽器輸入http://10.70.117.190:6080/vnc.html?path=websockify/?token=target1
點擊鏈接,輸入vncserver密碼
成功遠程桌面到Target1
遠程桌面到Target2
在瀏覽器輸入http://10.70.117.190:6080/vnc.html?path=websockify/?token=target2
點擊鏈接,輸入vncserver密碼