|-转 All in Web | 远程桌面网关-Apache Guacamole
前面分享了无客户端的VNC,SSH开源解决方案,按照这个节奏,接下来要介绍无客户端的RDP解决方案,无奈没找到单独的针对RDP的web方案,不过意外的发现一个更给力的,多合一的远程桌面网关,针对多种主流远程管理协议,一网打尽。
自己搭建后效果
简介
Apache Guacamole 是一个无客户端的远程桌面网关,它支持众多标准管理协议,例如 VNC(RFB),RDP,SSH 等等。通过名字知道该项目是Apache基金会旗下的一个开源项目,也从侧面表明该项目是一个较高标准,并具有广泛应用前景的项目,值得了解一下。
当Guacamole被部署在服务器上后,用户通过浏览器即可访问已经开启 VNC(RFB),RDP,SSH 等远程管理服务的主机,屏蔽用户使用环境差异,跨平台,另外由于Guacamole本身被设计为一种代理工作模型,方便对用户集中授权监控等管理,,也被众多堡垒机项目所集成,例如‘jumpserver’,‘next-terminal’。
Guacamole由两部分组成,guacamole-server和guacamole-client。
guacamole-client是用户用浏览其直接访问的web app,当然guacamole-client组件还自带一个web server,上面运行这个web app, 所以guacamole-client实际是一个web app和web server的集合体,用户认证层也是在这个组件内实现;
guacamole-server组件是接受并处理guacamole-client发送来的请求,然后翻译并转换这个请求,动态的调用遵循那些标准管理协议开发的开源客户端,例如FreeRDP,libssh2,LibVNC,代为连接Remote Desktops,最后回传数据给guacamole-client,guacamole-client回传数据给web browser,。整个过程中,翻译转换,动态调用是guacamole-server最核心的组件,称之为guacd,而那些开源的客户端被称为client plugins,client plugins这种方式是灵活的,加载什么就具备某种实现,前提是Guacamole protocol已经适配。
Guacamole protocol是专为Guacamole项目设计的协议,用于web browser与guacamole-client, guacamole-client与guacamole-server之间通信,它负责web browser侧 显示渲染和事件传输,guacamole-client不理解任何remote desktop protocol,它只理解Guacamole protocol,当web browser(用户)选择某种协议以及附带的参数时,经由Guacamole protocol编码,在http或https或websocket隧道基础上传输到guacamole-client,然后传输到guacamole-server,由guacamole-server解码,动态选择使用何种remote desktop client连接到Remote Desktops,并带上具体的参数,guacamole-server也不理解任何remote desktop protocol,它只理解Guacamole protocol。
PS:Guacamole protocol的开发,在项目早期,websocket彼时还未被信任,所以是基于http/https之上,现在也已经支持websocket,但是基于http/https的 并未被弃用,当由于某些原因,websocket无法使用时,会自动切换到基于http/https的旧版。
Apache Guacamole架构图只要Guacamole protocol设计的字段足够多,是可以原生支持remote desktop client的能力。
guacamole-server项目的被设计为一种标准化的api调用,完全独立guacamole-client,guacamole-client只是官方给的一个基于Java,JS的‘前端’样例,确实是非常简陋,如果你有需求,当然可以用其他语言和环境去构造。
对比noVNC
了解了Apache Guacamole的high-level架构和工作流程,可以来对比下之前分享的noVNC的架构...