簡介:Guacamole是無客戶端的遠程桌面網關,它支持RDP、SSH、Telnet、VNC等協議,客戶端是由js編寫的HTML5應用程序,用戶通過Web瀏覽器訪問Guacamole遠程桌面,其Teamviewer和向日葵都是基於C/S架構的遠程桌面連接組件。
一、基礎知識
1. 工作原理
A. 用戶使用Web瀏覽器連接到Guacamole服務器;
B. Guacamole客戶端由Guacamole服務器中的網絡服務器提供給用戶;
C. 加載后,此客戶端將使用Guacamole協議通過HTTP連接服務器;
D. 部署到Guacamole服務器的Web應用程序讀取Guacamole協議,並將其轉發到本地Guacamole代理guacd;
E. 該代理實際上解釋了Guacamole協議的內容,代表用戶連接到任意數量的遠程桌面服務器。
2. Guacamole配置目錄:/etc/guacamole
A. guacamole.properties:Guacamole主要配置文件,該文件中的屬性決定了如何連接到guacd,可配置身份驗證的擴展行為;
B. logback.xml:日志記錄信息文件;
C. extensions/:Guacamole擴展程序的安裝位置,客戶端在啟動時會自動加載此目錄中的所有.jar包;
D. lib/:擴展名所需要的庫的搜索目錄;
E. user-mapping.xml:默認的身份驗證文件。
二、配置文件
1. RDP協議
A. hostname:連接RDP服務器的主機名或IP地址,必填參數;
B. port:RDP服務器正在偵聽的端口,默認值是3389;
C. username:身份驗證的用戶名,如果不填寫就會讓用戶自己填寫;
D. password:身份驗證的密碼,如果不填寫就會讓用戶自己填寫;
E. enable-drive:是否啟用文件傳輸,默認為false,表示禁用;
F. disable-download:是否禁止從遠程服務器到瀏覽器端的下載,默認為false,表示允許下載,如果未啟用文件傳輸,就會忽略此參數;
G. disable-upload:是否禁止從瀏覽器端到遠程服務器的上傳,默認為false,表示允許上傳,如果未啟用文件傳輸,就會忽略此參數;
H. drive-path:存儲傳輸文件的目錄,如果未啟用文件傳輸,就會忽略此參數;
I. create-drive-path:如果目錄不存在,是否自動創建存儲文件的目錄,默認為false,表示不會創建,如果未啟用文件傳輸,就會忽略此參數;
J. enable-wallpaper:是否啟用渲染桌面壁紙,默認值為false,表示禁用;
K. enable-font-smoothing:是否將文本以平滑的邊緣呈現,默認值為false,表示粗糙邊緣;
L. remote-app:指要在遠程桌面上啟動的RemoteApp,
M. remote-app-dir:遠程應用程序的工作目錄,若果未配置遠程應用,就會忽略此參數;
N. remote-app-args:遠程應用程序的命令行參數,若果未配置遠程應用,就會忽略此參數;
2. SSH協議
A. hostname:連接SSH服務器的主機名或IP地址,必填參數;
B. port:SSH服務器正在偵聽的端口,默認值是22;
C. username:身份驗證的用戶名,如果不填寫就會在連接時提示您輸入用戶名;
D. password:身份驗證的密碼,如果不填寫就會在連接時提示您輸入密碼;
3. Telnet協議
A. hostname:連接Telnet服務器的主機名或IP地址,必填參數;
B. port:Telnet服務器正在偵聽的端口,默認值是23;
C. username:身份驗證的用戶名;
D. password:身份驗證的密碼;
4. VNC協議
A. hostname:連接VNC服務器的主機名或IP地址,必填參數;
B. port:VNC服務器正在偵聽的端口,默認值是5901;
C. username:身份驗證的用戶名;
D. password:身份驗證的密碼;
三、代碼講解
1. 登錄入口:org.apache.guacamole.rest.auth.TokenRESTService
2. 獲取配置列表:org.apache.guacamole.rest.connectiongroup.ConnectionGroupResource
3. 與guacd通信的hostnane:org.apache.guacamole.net.InetGuacamoleSocket
四、Guacamole定制開發
1. 自定義身份驗證插件
A. 繼承org.apache.guacamole.net.auth.simple.SimpleAuthenticationProvider類;
B. 重寫getIdentifier()和getAuthorizedConfigurations()方法;
C. 示例:http://guacamole.apache.org/doc/gug/custom-auth.html
2. 自定義Guacamole應用程序
A. 繼承org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet類;
B. 重寫doConnect()方法;
C. 在web.xml中配置URL映射隧道;
D. 編寫js客戶端。
E. 示例:http://guacamole.apache.org/doc/gug/writing-you-own-guacamole-app.html
五、Guacamole客戶端部署
1. RDP遠程桌面
A. 防火牆關閉,或相關rdp端口acl配置正確
B. 開啟主機遠程控制功能
C. 修改注冊表:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp],修改“SecurityLayer” 項的值為 1,修改 “UserAuthentication” 項的值為 0
2. RDP遠程應用
A. 修改注冊表:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList],修改“fDisabledAllowList” 項的值為 1
可參考:Guacamole配置手冊