基于Apache Guacamole的WebRDP技术编译安装实践【原创】

http://guacamole.incubator.apache.org/doc/gug/configuring-guacamole.html#guacamole-home

文章里只说重点,Apache Guacamole是一个开源的HTML5项目用于实现无客户端的远程管理。它可以可以很容易的编译运行在LINUX系统上,包括树莓派。

源码从这里获取:http://guacamole.incubator.apache.org/releases/
如果想二次开发或学习,从这里获取可能更好:https://github.com/search?utf8=%E2%9C%93&q=repo%3Aapache%2Fincubator-guacamole-server+repo%3Aapache%2Fincubator-guacamole-client+repo%3Aapache%2Fincubator-guacamole-website&type=Repositories&ref=searchresults

项目分为三个部分:
server web client
server部分编译参考这里:http://guacamole.incubator.apache.org/doc/gug/installing-guacamole.html

核心技术技巧就是把文章里提到的包都安装一遍,如果你的Debian/Ubuntu系列的电脑
可以执行这个:

sudo apt-get install libcairo2-dev libjpeg62-turbo-dev libpng12-dev \
        libossp-uuid-dev libavcodec-dev libavutil-dev libswscale-dev \
        libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev \
        libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev

如果是CentOS系列的自己去文章里提取吧。

我是用源码包编译的,所以可以直接 configure。如果你使用git clone获得的基础源码,你可能还需要使用autotool,具体怎么用?自己去上面那个URL里看吧。

解包过程就不说了。

./configure --with-init-dir=/etc/init.d

执行上述命令可以在安装包直接运行如果不想自动运行,可以不加任何参数。

一般来说只要库装全了编译都是OK的。这个项目可以支持RDP,SSH,Telnet,VNC,前面两个很重要,Telnet的话用处确实不大。

make
 
make install

下面是重点了:
guacamole 的服务名叫guacd它的配置信息需靠环境变量GUACAMOLE_HOME来指定配置文件路径
一般配置文件放在这里:/etc/guacamole下
这个目录不会自动创建所以你要自己创建:
mkdir /etc/guacamole
并且需要在/etc/profile里定义GUACAMOLE_HOME变量指向路径。

在profile的末尾加上

GUACAMOLE_HOME=/etc/guacamole
export GUACAMOLE_HOME

并执行:来

source /etc/profile

更新环境变量

在/etc/guacamole/guacamole.properties中写如下内容:

guacd-hostname: localhost
guacd-port: 4822
user-mapping: /etc/guacamole/user-mapping.xml
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml

在/etc/guacamole/user-mapping.xml中写如下内容:

<user-mapping>    
    <authorize username="user" password="user">
        <connection name="vnc">
            <protocol>vnc</protocol>
            <param name="hostname">192.168.2.206</param>
            <param name="port">5901</param>
            <param name="username">root</param>
            <param name="password">123456</param>
        </connection>
        <connection name="rdp">
            <protocol>rdp</protocol>
            <param name="hostname">192.168.0.47</param>
            <param name="port">3389</param>
            <param name="username">user</param>
            <param name="password">aaaaaa</param>
        </connection>
        <connection name="ssh">
            <protocol>ssh</protocol>
            <param name="hostname">192.168.0.109</param>
            <param name="port">22</param>
            <param name="username">user</param>
            <param name="password">ggggggggggg</param>
        </connection>
    </authorize>
</user-mapping>

这些内容你看完就知道该怎么改了。

service guacd start

执行上面这句或是参考官网的方法启动服务。

root@host:~# lsof -i:4822|grep LISTEN
guacd 11730 root 4u IPv4 222536 0t0 TCP localhost:4822 (LISTEN)

看到这个输出你就算完成一半了。

这个项目需要一个WEB容器来承载服务,我直接安装的tomcat,我的计划是用nginx做前端。
所以我是这样做的:

apt-get install tomcat8

guacamole.war是web承载服务,这个就不编译了,直接从官网下载然后放到:

/var/lib/tomcat8/webapps/guacamole.war

如果你的环境和我一样的话,那就是这里了。

你还需要在这里创建一个目录:

/usr/share/tomcat8/
 
mkdir .guacamole

把/etc/guacamole/guacamole.properties连接到/usr/share/tomcat8/.guacamole/guacamole.properties以便于让tomcat容器与guacd共享配置。

ln -n /etc/guacamole/guacamole.properties /usr/share/tomcat8/.guacamole/guacamole.properties
service tomcat8 restart

如果你把/etc/guacamole/user-mapping.xml改成正确的内容。那你就算是大功造成了。可以测试了。
http://192.168.0.108:8080/guacamole/
user-mapping.xml中的内容格式请参考:http://guacamole.incubator.apache.org/doc/gug/configuring-guacamole.html

一般来说,guacamole绑定127.0.0.1,4822端口也不需要加密。
tomcat 的绑定地址也需要改成127.0.0.1以确保安装。
前端使用nginx然后反向代理,加个证书就OK了。

经过测试发现,nginx反向代理无法支持WEB需要的高级特性。只能在tomcat或是其它兼容的容器上设置HTTPS以确保安全了。

server.xml

配置参考如下:

<Connector port="443" address="127.0.0.1" protocol="HTTP/1.1"
 	 	SSLEnabled="true" scheme="https" secure="true"
 	 	clientAuth="false" sslProtocol="TSL"
 	 	keystoreFile="/etc/tomcat8/pem/tomcat.keystore"
 	 	keystorePass="ssssssssssssss"
 	 	connectionTimeout="20000"
 	 	URIEncoding="UTF-8" />

外部参考

keytool用于生成自签名证书,可以参考这里

关于xmsg

技术面前人人平等.同时技术也不分高低贵贱.正所谓学无大小,达者为尊.
此条目发表在Linux, 功能配置分类目录,贴了, , , , , , 标签。将固定链接加入收藏夹。