鳄梨酱您无权访问此连接”
guacamole You do not have permission to access this connection"
按照
的方法成功设置了docker鳄梨酱0.9.8
- http://guac-dev.org/doc/gug/guacamole-docker.html
- http://kalzi.github.io/2015/guacamole-with-docker-containers/
使用下面的脚本并使用用户登录:guacadmin 密码:guacadmin
我能够设置用户和 rdp 连接。鳄梨酱的 UI 是可用的
直接通过 docker 安装脚本中配置的映射端口(在我的例子中是 8380),也可以通过按照鳄梨调味酱手册配置的反向 Apache 代理:
<Location /guac/ >
Order allow,deny
Allow from all
ProxyPass http://localhost:8380/guacamole/ flushpackets=on
ProxyPassReverse http://localhost:8380/guacamole/
</Location>
我尝试按照 rdp 连接手册进行操作
http://guac-dev.org/doc/gug/configuring-guacamole.html#rdp
但是当使用反向代理结束时:
这也发生在其他用户身上,请参阅:
https://sourceforge.net/p/guacamole/discussion/1110834/thread/73abbe35/
如何调试这种情况以找到正确的设置?
似乎有些可疑,因为作为管理员,例如guacadmin 我确实得到了
在以下对话框中尝试启用和保存连接权限时:
我可以访问用于权限的 mysql 数据库,例如
与
mysql> show tables;
+---------------------------------------+
| Tables_in_guacamole_db |
+---------------------------------------+
| guacamole_connection |
| guacamole_connection_group |
| guacamole_connection_group_permission |
| guacamole_connection_history |
| guacamole_connection_parameter |
| guacamole_connection_permission |
| guacamole_system_permission |
| guacamole_user |
| guacamole_user_permission |
+---------------------------------------+
这是我使用的鳄梨酱的 Dockerizing 脚本
#!/bin/bash
#
# WF 2015-10-26
#
# Guacamole (semi) automatic setup of guacamole Remote Desktop server for docker
# see
# http://guac-dev.org/doc/gug/guacamole-docker.html
# http://kalzi.github.io/2015/guacamole-with-docker-containers/
#
# Since: 2015-10-26
#
# config variables
# images
GUAC=glyptodon/guacamole
GUACD=glyptodon/guacd
MYSQL=mysql
# DB settings
DB=guacamole_db
DB_USER=guacamole_user
# prefix to be used for container names
prefix="lab"
#ansi colors
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html
blue='3[0;34m'
red='3[0;31m'
green='3[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='3[0m'
#
# a colored message
# params:
# 1: l_color - the color of the message
# 2: l_msg - the message to display
#
color_msg() {
local l_color=""
local l_msg=""
echo -e "${l_color}$l_msg${endColor}"
}
#
# error
#
# show an error message and exit
#
# params:
# 1: l_msg - the message to display
error() {
local l_msg=""
# use ansi red for error
color_msg $red "Error: $l_msg" 1>&2
exit 1
}
#
# show usage
#
usage() {
echo "usage: guac-setup"
# -h|--help|usage|show this usage
echo " -h|--help: show this usage"
# -m|--mysql|run mysql in linked container
echo " -m|--mysql:run mysql in linked container"
# -r|--run|run|run guacamole
echo " -p|--pull: pull guacamole"
echo " -pf|--prefix: set the containername prefix"
echo " -r|--run: run guacamole"
color_msg $blue "Example:"
echo " sudo ./guac-setup -p -pf test -r"
exit 1
}
#
# generate a random password
#
random_password() {
date +%N | sha256sum | base64 | head -c 16 ; echo
}
#
# run mysql in container
#
mysql_from_container() {
local l_option=""
local l_db=""
local l_dbparam=""
if [ "$l_db" != "" ]
then
l_dbparam=" $l_db"
fi
local l_cmd='exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'"$l_dbparam"
#echo "$l_cmd"
docker run $l_option --link $prefix-mysql:mysql --rm mysql sh -c "$l_cmd"
}
#
# initialize the database
#
init_db() {
local l_tmp=/tmp/initdb.sql
#docker run -it $GUAC /bin/bash
color_msg $blue creating database
cat << EOF | mysql_from_container -i
DROP DATABASE IF EXISTS $DB;
CREATE DATABASE IF NOT EXISTS $DB;
DROP USER '${DB_USER}';
CREATE USER '${DB_USER}' IDENTIFIED BY '${DB_PASSWD}';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user';
FLUSH PRIVILEGES;
EOF
color_msg $blue "getting initdb.sh"
docker run --rm $GUAC /opt/guacamole/bin/initdb.sh --mysql > $l_tmp
color_msg $blue "initializing database"
# pipe the result thru mysql
cat $l_tmp | mysql_from_container -i "$DB"
color_msg $blue "keeping password for db $DB at /var/lib/mysql/guac_passwd"
#echo $DB_PASSWD
echo $DB_PASSWD | docker exec -i $prefix-mysql /usr/bin/tee /var/lib/mysql/guac_passwd > /dev/null
}
#
# run guacamole
#
run () {
local l_prefix=""
MYSQL_ROOT_PASSWORD=`random_password`
color_msg $blue "starting $l_prefix-guacd"
docker run --name $l_prefix-guacd -d $GUACD
color_msg $blue "starting $l_prefix-mysql"
docker run --name $l_prefix-mysql -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD -d mysql:latest
docker ps -a --filter "name=$l_prefix*"
}
#
# pull images
#
pull() {
for image in $GUACD $GUAC $MYSQL
do
docker images | cut -c1-22 | grep $image
if [ $? -ne 0 ]
then
docker pull $image
else
color_msg $green "$image already pulled"
fi
done
}
#
# start it
#
startit() {
DB_PASSWD=`docker exec -i $prefix-mysql /bin/cat /var/lib/mysql/guac_passwd`
# now run the whole show
docker run --name $prefix-guacamole --link $prefix-guacd:guacd \
--link $prefix-mysql:mysql \
-e MYSQL_DATABASE=$DB \
-e MYSQL_USER=$DB_USER \
-e MYSQL_PASSWORD=$DB_PASSWD \
-d -p 8380:8080 $GUAC
}
# start of script
# check arguments
if [ $# -eq 0 ]
then
usage
fi
while test $# -gt 0
do
case in
# -h|--help|usage|show this usage
-h|--help)
usage;;
# -p|--pull|pull|pull guacamole
-p|--pull)
pull;;
# -pf|--prefix|set containername prefix
-pf|--prefix)
shift
prefix=
;;
# -r|--run|run|run guacamole
-r|--run)
run $prefix;;
# -m|--mysql|run mysql connection to container
-m|--mysql)
mysql_from_container -it
;;
-ms|--mysql_shell)
docker exec -it $prefix-mysql /bin/bash
;;
-i|--initdb)
DB_PASSWD=`random_password`
init_db
;;
--setup)
pull
run $prefix
;;
--start)
startit
;;
esac
shift
done
如何调试这种情况以找到正确的设置?
如果出现此类身份验证错误,您应该做的第一件事是检查 Tomcat 日志中是否有错误。如果发生导致鳄梨酱 return "Permission denied" 的错误,则应记录该错误并将在时间上与产生错误的操作相关联。
如果没有相关内容跳出,您还可以尝试 enabling debug-level logging. This involves creating a logback.xml
file within GUACAMOLE_HOME
包含以下内容:
<configuration>
<!-- Appender for debugging -->
<appender name="GUAC-DEBUG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Log at DEBUG level -->
<root level="debug">
<appender-ref ref="GUAC-DEBUG"/>
</root>
</configuration>
如果您使用官方 Docker 图像执行此操作,GUACAMOLE_HOME
将是 /root/.guacamole
,并且您需要重新启动容器以强制 Tomcat 重新启动并重新加载鳄梨酱配置。
如果您在 Nginx 或 Apache 等代理后面使用 Guacamole,我还建议您首先尝试直接连接到 Guacamole。不正确的代理配置可能会阻止 WebSocket 工作,然后阻止回退 HTTP 隧道工作。 从 Guacamole 的角度来看,这种错误配置可能会出现,即您试图在未登录的情况下访问资源,从而导致权限错误。
http://guac-dev.org/doc/gug/proxying-guacamole.html#websocket-and-apache
具有必要的配置(此处显示适用于正在使用的 8380 端口和 /guac 路径)
<Location /guac/websocket-tunnel>
Order allow,deny
Allow from all
ProxyPass ws://localhost:8380/guacamole/websocket-tunnel
ProxyPassReverse ws://localhost:8380/guacamole/websocket-tunnel
</Location>
要激活我使用的配置:
a2enmod proxy_wstunnel
Considering dependency proxy for proxy_wstunnel:
Module proxy already enabled
Enabling module proxy_wstunnel.
To activate the new configuration, you need to run:
service apache2 restart
service apache2 restart
* Restarting web server apache2
现在连接既可以直接通过端口 8380 工作,也可以通过将其映射到我的主服务器上的 /guac 的反向代理配置工作。
按照
的方法成功设置了docker鳄梨酱0.9.8- http://guac-dev.org/doc/gug/guacamole-docker.html
- http://kalzi.github.io/2015/guacamole-with-docker-containers/
使用下面的脚本并使用用户登录:guacadmin 密码:guacadmin 我能够设置用户和 rdp 连接。鳄梨酱的 UI 是可用的 直接通过 docker 安装脚本中配置的映射端口(在我的例子中是 8380),也可以通过按照鳄梨调味酱手册配置的反向 Apache 代理:
<Location /guac/ >
Order allow,deny
Allow from all
ProxyPass http://localhost:8380/guacamole/ flushpackets=on
ProxyPassReverse http://localhost:8380/guacamole/
</Location>
我尝试按照 rdp 连接手册进行操作 http://guac-dev.org/doc/gug/configuring-guacamole.html#rdp
但是当使用反向代理结束时:
这也发生在其他用户身上,请参阅:
https://sourceforge.net/p/guacamole/discussion/1110834/thread/73abbe35/
如何调试这种情况以找到正确的设置?
似乎有些可疑,因为作为管理员,例如guacadmin 我确实得到了
我可以访问用于权限的 mysql 数据库,例如 与
mysql> show tables;
+---------------------------------------+
| Tables_in_guacamole_db |
+---------------------------------------+
| guacamole_connection |
| guacamole_connection_group |
| guacamole_connection_group_permission |
| guacamole_connection_history |
| guacamole_connection_parameter |
| guacamole_connection_permission |
| guacamole_system_permission |
| guacamole_user |
| guacamole_user_permission |
+---------------------------------------+
这是我使用的鳄梨酱的 Dockerizing 脚本
#!/bin/bash
#
# WF 2015-10-26
#
# Guacamole (semi) automatic setup of guacamole Remote Desktop server for docker
# see
# http://guac-dev.org/doc/gug/guacamole-docker.html
# http://kalzi.github.io/2015/guacamole-with-docker-containers/
#
# Since: 2015-10-26
#
# config variables
# images
GUAC=glyptodon/guacamole
GUACD=glyptodon/guacd
MYSQL=mysql
# DB settings
DB=guacamole_db
DB_USER=guacamole_user
# prefix to be used for container names
prefix="lab"
#ansi colors
#http://www.csc.uvic.ca/~sae/seng265/fall04/tips/s265s047-tips/bash-using-colors.html
blue='3[0;34m'
red='3[0;31m'
green='3[0;32m' # '\e[1;32m' is too bright for white bg.
endColor='3[0m'
#
# a colored message
# params:
# 1: l_color - the color of the message
# 2: l_msg - the message to display
#
color_msg() {
local l_color=""
local l_msg=""
echo -e "${l_color}$l_msg${endColor}"
}
#
# error
#
# show an error message and exit
#
# params:
# 1: l_msg - the message to display
error() {
local l_msg=""
# use ansi red for error
color_msg $red "Error: $l_msg" 1>&2
exit 1
}
#
# show usage
#
usage() {
echo "usage: guac-setup"
# -h|--help|usage|show this usage
echo " -h|--help: show this usage"
# -m|--mysql|run mysql in linked container
echo " -m|--mysql:run mysql in linked container"
# -r|--run|run|run guacamole
echo " -p|--pull: pull guacamole"
echo " -pf|--prefix: set the containername prefix"
echo " -r|--run: run guacamole"
color_msg $blue "Example:"
echo " sudo ./guac-setup -p -pf test -r"
exit 1
}
#
# generate a random password
#
random_password() {
date +%N | sha256sum | base64 | head -c 16 ; echo
}
#
# run mysql in container
#
mysql_from_container() {
local l_option=""
local l_db=""
local l_dbparam=""
if [ "$l_db" != "" ]
then
l_dbparam=" $l_db"
fi
local l_cmd='exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'"$l_dbparam"
#echo "$l_cmd"
docker run $l_option --link $prefix-mysql:mysql --rm mysql sh -c "$l_cmd"
}
#
# initialize the database
#
init_db() {
local l_tmp=/tmp/initdb.sql
#docker run -it $GUAC /bin/bash
color_msg $blue creating database
cat << EOF | mysql_from_container -i
DROP DATABASE IF EXISTS $DB;
CREATE DATABASE IF NOT EXISTS $DB;
DROP USER '${DB_USER}';
CREATE USER '${DB_USER}' IDENTIFIED BY '${DB_PASSWD}';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user';
FLUSH PRIVILEGES;
EOF
color_msg $blue "getting initdb.sh"
docker run --rm $GUAC /opt/guacamole/bin/initdb.sh --mysql > $l_tmp
color_msg $blue "initializing database"
# pipe the result thru mysql
cat $l_tmp | mysql_from_container -i "$DB"
color_msg $blue "keeping password for db $DB at /var/lib/mysql/guac_passwd"
#echo $DB_PASSWD
echo $DB_PASSWD | docker exec -i $prefix-mysql /usr/bin/tee /var/lib/mysql/guac_passwd > /dev/null
}
#
# run guacamole
#
run () {
local l_prefix=""
MYSQL_ROOT_PASSWORD=`random_password`
color_msg $blue "starting $l_prefix-guacd"
docker run --name $l_prefix-guacd -d $GUACD
color_msg $blue "starting $l_prefix-mysql"
docker run --name $l_prefix-mysql -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD -d mysql:latest
docker ps -a --filter "name=$l_prefix*"
}
#
# pull images
#
pull() {
for image in $GUACD $GUAC $MYSQL
do
docker images | cut -c1-22 | grep $image
if [ $? -ne 0 ]
then
docker pull $image
else
color_msg $green "$image already pulled"
fi
done
}
#
# start it
#
startit() {
DB_PASSWD=`docker exec -i $prefix-mysql /bin/cat /var/lib/mysql/guac_passwd`
# now run the whole show
docker run --name $prefix-guacamole --link $prefix-guacd:guacd \
--link $prefix-mysql:mysql \
-e MYSQL_DATABASE=$DB \
-e MYSQL_USER=$DB_USER \
-e MYSQL_PASSWORD=$DB_PASSWD \
-d -p 8380:8080 $GUAC
}
# start of script
# check arguments
if [ $# -eq 0 ]
then
usage
fi
while test $# -gt 0
do
case in
# -h|--help|usage|show this usage
-h|--help)
usage;;
# -p|--pull|pull|pull guacamole
-p|--pull)
pull;;
# -pf|--prefix|set containername prefix
-pf|--prefix)
shift
prefix=
;;
# -r|--run|run|run guacamole
-r|--run)
run $prefix;;
# -m|--mysql|run mysql connection to container
-m|--mysql)
mysql_from_container -it
;;
-ms|--mysql_shell)
docker exec -it $prefix-mysql /bin/bash
;;
-i|--initdb)
DB_PASSWD=`random_password`
init_db
;;
--setup)
pull
run $prefix
;;
--start)
startit
;;
esac
shift
done
如何调试这种情况以找到正确的设置?
如果出现此类身份验证错误,您应该做的第一件事是检查 Tomcat 日志中是否有错误。如果发生导致鳄梨酱 return "Permission denied" 的错误,则应记录该错误并将在时间上与产生错误的操作相关联。
如果没有相关内容跳出,您还可以尝试 enabling debug-level logging. This involves creating a logback.xml
file within GUACAMOLE_HOME
包含以下内容:
<configuration>
<!-- Appender for debugging -->
<appender name="GUAC-DEBUG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Log at DEBUG level -->
<root level="debug">
<appender-ref ref="GUAC-DEBUG"/>
</root>
</configuration>
如果您使用官方 Docker 图像执行此操作,GUACAMOLE_HOME
将是 /root/.guacamole
,并且您需要重新启动容器以强制 Tomcat 重新启动并重新加载鳄梨酱配置。
如果您在 Nginx 或 Apache 等代理后面使用 Guacamole,我还建议您首先尝试直接连接到 Guacamole。不正确的代理配置可能会阻止 WebSocket 工作,然后阻止回退 HTTP 隧道工作。 从 Guacamole 的角度来看,这种错误配置可能会出现,即您试图在未登录的情况下访问资源,从而导致权限错误。
http://guac-dev.org/doc/gug/proxying-guacamole.html#websocket-and-apache
具有必要的配置(此处显示适用于正在使用的 8380 端口和 /guac 路径)
<Location /guac/websocket-tunnel>
Order allow,deny
Allow from all
ProxyPass ws://localhost:8380/guacamole/websocket-tunnel
ProxyPassReverse ws://localhost:8380/guacamole/websocket-tunnel
</Location>
要激活我使用的配置:
a2enmod proxy_wstunnel
Considering dependency proxy for proxy_wstunnel:
Module proxy already enabled
Enabling module proxy_wstunnel.
To activate the new configuration, you need to run:
service apache2 restart
service apache2 restart
* Restarting web server apache2
现在连接既可以直接通过端口 8380 工作,也可以通过将其映射到我的主服务器上的 /guac 的反向代理配置工作。