guacamole安装搭建

guacamole安装搭建

  • guacamole-1.0.0的安装配置

环境:tomcat9.0 + openjdk version "1.8.0_212" + centos7.5

安装依赖

  1. 必须安装的依赖
    libguac使用Cairo进行图形渲染。如果没有安装Cairo,鳄梨酱就无法运作。
    libguac使用libjpeg-turbo来提供JPEG支持
    libgung使用libpng来编写PNG图像
    libguac使用OSSP UUID为每个Guacamole连接分配唯一ID。

    yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel

  2. 可选安装的依赖
    Guacamole的可选依赖项决定了guacamole-server的哪些部分 将被构建。这包括对各种远程桌面协议的支持,以及这些协议的任何其他功能:

  • VNC支持取决于libvncclient库,它是libVNCServer的一部分。
    pulseaudio 提供VNC的实验性音频功能

    yum install libvncserver-devel pulseaudio-libs-devel
    
  • RDP支持取决于最新版本的FreeRDP(1.0或更高版本,但请不要使用git的非发行版本)。

    yum install freerdp-devel
    
  • SSH支持依赖于
    libssh2 SSH支持。
    OpenSSL 提供对SSL和TLS的支持。
    Pango 一种字体渲染和文本布局库,由Guacamole的内置终端仿真器使用。

    yum install libssh2-devel openssl-devel pango-devel
    
  • Telnet依赖于libtelnet和 Pango。(libtelnet-devel不在CentOS7官方yum源内,可先安装epel-release源)

    yum install libtelnet-devel pango-devel
    
  • guacenc(将屏幕录制转换为视频)实用程序 依赖于FFmpeg,并且仅在安装了FFmpeg提供的libavcodec,libavutil和 libswscale库时才构建 。(ffmpeg-devel不在CentOS7官方yum源内,可先安装DEXTOP源) 不需要屏幕录制功能时,可不安装。

    yum install ffmpeg-devel
    
  • libvorbis支持Ogg Vorbis - 一种免费且开放的声音压缩标准。如果安装了libguac,将支持Ogg Vorbis,支持音频的协议将尽可能使用Ogg Vorbis压缩。否则,声音将仅编码为WAV(未压缩),并且仅在您的浏览器也支持WAV时才可用。

    yum install libvorbis-devel
    
  • libgubp由libgub用于编写WebP图像。尽管Guacamole协议并未强制支持WebP,但如果浏览器和libguac都支持WebP图像,则会使用WebP图像。

    yum install libwebp-devel
    
  • 使用剪切板需要安装的依赖

    yum -y install freerdp-plugins
    

为了体验完整功能,以上全部安装。
如果你只想直接搭建的话请复制粘贴即可

yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel
yum -y install ffmpeg-devel  freerdp-devel pango-devel libssh2-devel
yum -y install libtelnet-devel libvncserver-devel pulseaudio-libs-devel
yum -y install openssl-devel libvorbis-devel libwebp-devel
yum -y install freerdp-plugins ##不安装剪切板不能用

下载相关的软件包

我们使用的ldap加mysql双重认证的方式,用户登录控制走ldap,用户的权限控制走mysql

  • 下载guacamole-server

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/guacamole/1.0.0/source/guacamole-server-1.0.0.tar.gz
    
  • 下载guacamole-client 这个client是对于guacd来说的。对于用户来说还是server端

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/guacamole/1.0.0/binary/guacamole-1.0.0.war
    
  • 下载ldap相关依赖插件包

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/guacamole/1.0.0/binary/guacamole-auth-ldap-1.0.0.tar.gz
    
  • 下载mysql依赖包

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/guacamole/1.0.0/binary/guacamole-auth-jdbc-1.0.0.tar.gz
    
  • 下载tomcat

    wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.19/bin/apache-tomcat-9.0.19.tar.gz
    

安装guacamole-server

tar xvf guacamole-server-1.0.0.tar.gz
cd guacamole-server-1.0.0
./configure --with-init-dir=/etc/init.d
make & make install & ldconfig
/etc/init.d/guacd start  guacd

这个进程才是真正的server。所有的连接都是这个进程完成的
启动这个进程以后会默认监听127.0.0.1的4822端口

安装guacamole-client

cd /data/w/www
tar xvf apache-tomcat-9.0.19.tar.gz
mv apache-tomcat-9.0.19 guacamole.corp.bianlifeng.com
cp /root/guacamole-1.0.0.war guacamole.corp.bianlifeng.com/webapps/
cd guacamole.corp.bianlifeng.com/
./bin/startup.sh

配置guacamole.properties文件

mkdir /etc/guacamole/
vim /etc/guacamole/guacamole.properties
hostname:localhost   # 这个是guacd进程所在的地址
guacd-port:4822  # guacd端口
enable-clipboard-integration:true
# mysql的配置
mysql-hostname: rw-common-ops-mysql.vip.blibee.com
mysql-port: 33006
mysql-database: guacamole
mysql-username: guacamol_9p_rw
mysql-password: 9AnC6gbsgS14zwxi
# ldap的配置
ldap-hostname: ad.vip.blibee.com
ldap-port: 389
ldap-user-base-dn: ou=allusers,ou=blf,dc=corp,dc=bianlifeng,dc=com
ldap-search-bind-dn: CN=bind_******,OU=Ldap_User,OU=OtherUser,DC=corp,DC=bianlifeng,DC=com
ldap-search-bind-password:*****
ldap-username-attribute: sAMAccountName
ldap-user-search-filter:(objectClass=user)
ldap-max-search-results: 40000

配置mysql和ldap

搞个库然后把表导入就行

tar xvf guacamole-auth-jdbc-1.0.0.tar.gz
tar xvf guacamole-auth-ldap-1.0.0.tar.gz
mkdir /etc/guacamole/lib/
mkdir /etc/guacamole/extensions
yum install mysql-connector-java-8.0.16-1.el7.noarch.rpm -y
配置jar包
cp /usr/share/java/mysql-connector-java.jar /etc/guacamole/lib/
cp /root/guacamole-auth-jdbc-1.0.0/mysql/guacamole-auth-jdbc-mysql-1.0.0.jar  /etc/guacamole/extensions/
cp /root/guacamole-auth-ldap-1.0.0/guacamole-auth-ldap-1.0.0.jar /etc/guacamole/extensions/

向mysql中导入数据库
/root/guacamole-auth-jdbc-1.0.0/mysql/schema 表的位置

重启tomcat进程 方式服务器的8080端口就能访问了

每天同步一遍用户数据到数据库中

#!/bin/python
#coding: utf-8
 
import  pymysql
import requests
class Exec():
    def __init__(self):
        self.hostname = "****"
        self.user = "****"
        self.passwd = "****"
        self.port = ****
        self.database = "guacamole"
    def conn(self):
        self.db = pymysql.connect(host=self.hostname, user=self.user, password=self.passwd, database=self.database, port=self.port)
        self.cursor = self.db.cursor()
    def run_exec(self, sql):
        self.cursor.execute(sql)
        self.db.commit()
 
    def query(self, sql):
        self.cursor.execute(sql)
        data = self.cursor.fetchall()
        return data
    def close(self):
        self.db.close()
 
if __name__ == '__main__':
    a = Exec()
    a.conn()
    result = requests.get("xxxxxxxxxxxxx")
    result = result.json()["data"]["data"]
    for username in result:
        query_user = '''select entity_id from guacamole_entity where  name="{username}";''' . format(username=username)
        user =  a.query(sql=query_user)
        if user != ():
            continue
        add_user = '''insert into guacamole_entity (name, type) value ("%s", "USER");''' % (username)
        a.run_exec(sql=add_user)
        query_entity_id = '''select entity_id from guacamole_entity where  name="{username}";''' . format(username=username)
        entity_id = a.query(sql=query_entity_id)[0][0]
        add_password = '''INSERT INTO guacamole_user (entity_id, password_salt, password_hash, password_date) SELECT {entity_id}, UNHEX(SHA2(UUID(), 256)), UNHEX(SHA2(CONCAT('', HEX(UNHEX(SHA2(UUID(), 256)))), 256)), CURRENT_TIMESTAMP FROM guacamole_entity WHERE name = '{username}' AND type = 'USER';'''.format(entity_id=entity_id, username=username)
        a.run_exec(sql=add_password)
        add_permission = '''insert into guacamole_system_permission (entity_id, permission) value ("{entity_id}", "CREATE_CONNECTION");''' .format(entity_id=entity_id)
        a.run_exec(sql=add_permission)
        print ("add user %s"% (username))
    a.close()
posted @ 2020-02-14 16:39  I'm杨呵呵  阅读(3773)  评论(0编辑  收藏  举报