之前记录了如何在VPS(Ubuntu/Debian)上安装桌面环境,并使用Windows中自带的远程桌面进行连接,这次我们使用guacamole,让你在浏览器中就可以方便的操作远程桌面。这种方案同样支持音频输出,并且连接速度也很不错。本篇文章以 Debian11 为例安装。
项目地址:
Server端
Client端
一、安装和配置Guacamole
1.1 准备工作
首先需要根据如何在VPS(Ubuntu/Debian)上安装桌面环境安装好桌面环境,再进行下一步
在前面的配置没问题的情况下,继续安装依赖
sudo apt update -y && sudo apt install build-essential freerdp2-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libcairo2-dev libjpeg62-turbo-dev libjpeg-dev libpng-dev libtool-bin libpango1.0-dev libpango1.0-0 libssh2-1 libwebsockets16 libwebsocketpp-dev libossp-uuid-dev libssl-dev libwebp-dev libvorbis-dev libpulse-dev libwebsockets-dev libvncserver-dev libssh2-1-dev openssl -y
接下来安装 tomcat,这是 Guacamole web 所必须要的
sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user -y
启动 tomcat
sudo systemctl enable --now tomcat9
确保启动成功
sudo systemctl status tomcat9
应该看到
1.2 编译Guacamole-server
进入编译目录
cd /usr/src
进入官网下载源代码,例如
wget https://dlcdn.apache.org/guacamole/1.5.0/source/guacamole-server-1.5.0.tar.gz
解压并进入
tar -xzvf guacamole-server-1.5.0.tar.gz
cd guacamole-server-*/
准备编译
./configure --with-systemd-dir=/etc/systemd/system/
会看到
编译并安装
make && make install
应用系统库的更改
sudo ldconfig
1.3 配置Guacamole-server
创建并配置目录
mkdir -p /etc/guacamole/{extensions,lib}
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
创建配置
sudo nano /etc/guacamole/guacamole.properties
写入
guacd-hostname: localhost
guacd-port: 4822
# user mapping and user connections
user-mapping: /etc/guacamole/user-mapping.xml
这里没有特殊需求不需要更改上面的配置
创建日志记录配置
sudo nano /etc/guacamole/logback.xml
写入
<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>
计算你的登录密码的md5值
echo -n YOUR_PWD | openssl md5
这里将 YOUR_PWD 替换为你想设置的密码
执行后应该会看到
(stdin)= eb5bc39f61728a5f035be01d6039220a
(stdin)= 之后的一串就是md5值,例如 eb5bc39f61728a5f035be01d6039220a
创建登录配置
sudo nano /etc/guacamole/user-mapping.xml
写入
<user-mapping>
<!-- Another user, but using md5 to hash the password
(example below uses the md5 hash of "PASSWORD") -->
<authorize
username="YOUR_USR"
password="YOUR_PWD_MD5"
encoding="md5">
<!-- First authorized connection -->
<connection name="SSH localhost">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
<param name="username">YOUR_SSH_USR</param>
<param name="password">YOUR_SSH_PWD</param>
</connection>
<!-- Second authorized connection -->
<connection name="RDP localhost">
<protocol>rdp</protocol>
<param name="hostname">localhost</param>
<param name="port">3389</param>
<param name="username">YOUR_RDP_USR</param>
<param name="password">YOUR_RDP_PWD</param>
</connection>
</authorize>
</user-mapping>
上面这段配置中包含
YOUR_USR 更改为你登录guacamole的用户名
YOUR_PWD_MD5 更改为你登录 guacamole 的密码的 md5 值,即上面计算出来的那一串
下面的配置是 guacamole 进行连接时使用的信息,这里我只添加了 ssh 和 rdp,在相应的位置改成你的用户名和密码就好了
1.4 安装Guacamole-client
同样去官网下载,这次直接下载打包好的文件,但注意 client 的版本要与 server 对应,例如
cd /usr/src && wget https://dlcdn.apache.org/guacamole/1.5.0/binary/guacamole-1.5.0.war
然后
sudo cp guacamole-1.5.0.war /var/lib/tomcat9/webapps/guacamole.war
重启 tomcat 并启动 guacd
sudo ldconfig
sudo systemctl restart tomcat9
sudo systemctl enable --now guacd
确保正常启动
sudo systemctl status guacd
应该看到
此时访问 IP:8080/guacamole 就可以看到登录界面了
二、常见问题解决
2.1 RDP无法连接
如果按照上面的操作,如果不出意外的话,ssh 登录应该是没问题的,但是 rdp 会报错,说登录失败
RDP server closed/refused connection: Security negotiation failed (wrong security type?)
guacd[133877]: INFO:#011RDP server closed/refused connection: Security negotiation failed (wrong security type?)
这是因为 guacd 在以 daemon 身份运行,就会出现这个问题,我们为guacd新建一个账户并运行就可以了
useradd -M -d /var/lib/guacd/ -r -s /sbin/nologin -c "Guacd User" guacd
mkdir /var/lib/guacd
chown -R guacd: /var/lib/guacd
sed -i 's/daemon/guacd/' /etc/systemd/system/guacd.service
systemctl daemon-reload
systemctl restart guacd
这样一来,rdp 就应该可以正常工作了。
但如果出现的是下面问题的话
那就是 Debian11 + Gnome桌面真的用不了 rdp,放弃吧。
2.2 其他问题
如果前面的操作有误的话,最大的可能是连接时看到这个错误
这时需要通过日志来判断问题所在,一般在下面两个地方可以看到
tail -f /var/log/syslog
sudo systemctl status guacd
如果这里给出了错误,那么就按照报错进行修正,如果都没有报错信息的话,也有可能是前面的配置文件中某一项的值不对,还得从头仔细检查
三、使用体验
登录后就会看到之前配置过的连接
在线ssh功能
不得不说,这个在线 ssh 功能做的太简陋了,远不如很多 webssh 好用,但是 rdp 还是不错的,在浏览器中访问远程桌面环境的体验良好,可以做到音画同步且无卡顿,看个视频还是没有问题的。