配置Guacamole

Guacamole安装后,需要配置用户和连接,才能正常工作。本章介绍Guacamole的一般配置及其默认身份验证方法的使用。

user-mapping.xml
  1. 极小化部署Guacamole。
  2. 以一种相对简单的方法来验证Guacamole是否被正确装配。

其他更复杂的身份验证方法(如使用后端数据库、LDAP等)将在单独的专门地章节中讨论。

GUACAMOLE_HOMEguacamole.properites

GUACAMOLE_HOME(/etc/guacamole)

GUACAMOLE_HOME/etc/guacamoleGUACAMOLE_HOME
guacdLogbackLogback.jar.jar

重载GUACAMOLE_HOME

/etc/guacamoleGUACAMOLE_HOME
.guacamoleGUACAMOLE_HOMEGUACAMOLE_HOMEguacamole.home

guacamole.properties

guacamole.properties
classpathguacamole.propertiesclasspathguacamole.properties
GUACAMOLE_HOEMclasspath
guacamole.properties
allowed-languages: en, de
enable-environment-properties: true
extension-priority: saml
extension-priority: *, saml
...
23:32:06.467 [main] INFO  o.a.g.extension.ExtensionModule - Multiple extensions are installed and will be loaded in order of decreasing priority:
23:32:06.468 [main] INFO  o.a.g.extension.ExtensionModule -  - [postgresql] "PostgreSQL Authentication" (/etc/guacamole/extensions/guacamole-auth-jdbc-postgresql-1.4.0.jar)
23:32:06.468 [main] INFO  o.a.g.extension.ExtensionModule -  - [ldap] "LDAP Authentication" (/etc/guacamole/extensions/guacamole-auth-ldap-1.4.0.jar)
23:32:06.468 [main] INFO  o.a.g.extension.ExtensionModule -  - [openid] "OpenID Authentication Extension" (/etc/guacamole/extensions/guacamole-auth-sso-openid-1.4.0.jar)
23:32:06.468 [main] INFO  o.a.g.extension.ExtensionModule -  - [saml] "SAML Authentication Extension" (/etc/guacamole/extensions/guacamole-auth-sso-saml-1.4.0.jar)
23:32:06.468 [main] INFO  o.a.g.extension.ExtensionModule - To change this order, set the "extension-priority" property or rename the extension files. The default priority of extensions is dictated by the sort order of their filenames.
...
skip-if-unavailable: mysql, ldap
skip-if-unavailable
guacd-hsotnameguacd-portguacamole.properties
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port:     4822

Web应用程序中的日志记录

catalina.out
<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>
appenderLogbackappendeappenderappender

使用默认身份验证机制

Guacamole的默认身份验证模块很简单,由用户名到配置的映射组成。该身份验证模块是Guacamole自带的,只需从一个XML文件中读取用户名和密码。它始终处于启用状态,但仅当XML文件存在时才会从中读取,并且相对于任何其他身份验证扩展,它的优先级始终是最后一个。

guacamole-ext
user-mapping.xml
GUACAMOLE_HOME/user-mapping.xmluser mappinguser mapping
<user-mapping>

    <!-- Per-user authentication and config information -->
    <authorize username="USERNAME" password="PASSWORD">
        <protocol>vnc</protocol>
        <param name="hostname">localhost</param>
        <param name="port">5900</param>
        <param name="password">VNCPASS</param>
    </authorize>

    <!-- Another user, but using md5 to hash the password
         (example below uses the md5 hash of "PASSWORD") -->
    <authorize
            username="USERNAME2"
            password="319f4d26e3c536b5dd871bb2c52e3178"
            encoding="md5">

        <!-- First authorized connection -->
        <connection name="localhost">
            <protocol>vnc</protocol>
            <param name="hostname">localhost</param>
            <param name="port">5901</param>
            <param name="password">VNCPASS</param>
        </connection>

        <!-- Second authorized connection -->
        <connection name="otherhost">
            <protocol>vnc</protocol>
            <param name="hostname">otherhost</param>
            <param name="port">5900</param>
            <param name="password">VNCPASS</param>
        </connection>

    </authorize>

</user-mapping>

添加用户

user-mapping.xmlusername/passwordusernamepasswordusername/password
<authorize username="USER" password="PASS">
    ...
</authorize>

在上面的例子中,密码将以明文形式列出。如果不想这样做,也可以使用MD5哈希指定密码:

<authorize username="USER"
           password="319f4d26e3c536b5dd871bb2c52e3178"
           encoding="md5">
    ...
</authorize>
user-mapping.xml

向用户添加连接

DEFAULT

配置连接

Guacamole支持的每个协议都有自己的一组配置参数。这些参数通常描述远程桌面服务器的主机名和端口、连接时要使用的凭据(如果有),以及显示器的大小和颜色深度。如果协议支持文件传输,则还将提供启用该功能的选项。

VNC

VNC协议是Guacamole支持的最简单也是第一个协议。虽然通常没有RDP那么快,但多数VNC服务器已经足够了,并且Guacamole上的VNC往往比VNC本身更快,因为带宽使用率降低了。

libguac-client-vncguacamole-server
!注意:
除了下面VNC特定的参数外,Guacamole的VNC支持还接受Guacamole为多个协议提供的某些功能的参数:

网络参数

除了反向模式的VNC连接之外,VNC的工作原理是与运行一个或多个VNC服务器的特定主机建立出站网络连接。每个VNC服务器都与一个显示编号相关联,相应的端口号由此派生。

:1

身份验证

VNC标准仅定义基于密码的身份验证。其他身份验证机制也存在,但都是非标准或专有的。Guacamole目前既支持标准的仅基于密码的身份验证,也支持用户名和密码身份验证。

  • username

    尝试身份验证时使用的用户名(如果有)。此参数是可选的。

  • password

    尝试身份验证时使用的密码(如果有)。此参数是可选的。

显示设置

VNC服务器不允许客户端请求特定的显示尺寸,因此,在显示宽度和高度方面,将由你的VNC服务器决定。但是,为了减少带宽使用,你可以请求VNC服务器减少其颜色深度。Guacamole将自动检测256色图像,除了可以绝对保证通过强制将颜色深度设置为8位的通过连接发送的图形外。颜色深度由VNC服务器决定。

如果你注意到VNC的显示存在问题,例如缺少鼠标光标、存在多个鼠标光标或奇怪的颜色(例如蓝色看起来更像橙色或红色),这些通常是VNC服务器中的错误或限制造成的,可以使用额外的参数来解决这些问题。

trueremotelibvnclientlibguac-client-vnctruetrue

VNC中继器

UltraVNC
UltraVNCUltraVNC

反向VNC连接

Guacamole支持“反向”VNC连接,其中VNC客户端监听来自VNC服务器的传入连接。当使用反向VNC连接时,VNC客户端和服务器会切换网络角色,但在其他方面,它们会正常工作。VNC服务器仍然提供远程显示,VNC客户端仍然提供所有键盘和鼠标输入。

trueguacd

音频支持(通过PulseAudio)

PulseaAudio
PulseAudioPulseAudioPulseAudio
PulseAudioPulseAudio/etc/pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=192.168.1.0/24 auth-anonymous=1
PulseAudio192.168.1.0/24guacd
load-module module-native-protocol-tcp auth-anonymous=1
auth-anonymous=1PulseAudiocookiePulseAudio
PulseAudioPulseAudioPulseAudioPulseAudionetstat
$ netstat -ln | grep 4713
tcp        0      0 0.0.0.0:4713            0.0.0.0:*               LISTEN
tcp6       0      0 :::4713                 :::*                    LISTEN
$

以下参数可用于配置VNC的音频支持:

truePulseAudioPulseAudioPulseAudiohostnamePulseAudioguacdPulseAudio

剪贴板编码

UTF-8ISO 8859-1UTF-8ISO 8859-1clipboard-encoding
❗重点:
VNC服务器必然支持的唯一剪贴板编码是ISO 8859-1。如果VNC服务器支持其他编码,则只应使用clipboard-encoding参数覆盖剪贴板编码。
ISO 8859-1ISO 8859-1ISO 8859-1UTF-8UnicodeUTF-16UnicodeUTF-8Code page 1252ISO 8859-1

添加一个VNC连接

user-mapping.xml
<connection name="Unique Name">
    <protocol>vnc</protocol>
    <param name="hostname">localhost</param>
    <param name="port">5901</param>
</connection>

Unique Namelocalhost5901

其他身份验证方法将提供描述如何配置新连接的文档。如果使用的身份验证方法完全实现了Guacamole的身份验证API的功能,那么你将能够使用Guacamole内置的管理界面轻松直观地添加一个新的VNC连接。你将不需要编辑配置文件。

选择哪个VNC服务器?

在性能方面,选择VNC服务器会有很大的差异,尤其是在速度较慢的网络上。虽然许多系统默认提供VNC访问,但通常不是最快的方法。

RealVNC 或 TigerVNC
RealVNCTigerVNC
TightVNC
TightVNCRealVNCTigerVNCTightVNCJPEGPNGJPEGJPEGPNGJPEG
x11vnc
x11vncx11vncRealVNCTigerVNCTightVNCx11vnc
vino
vinox11vncvinox11vncRealVNCTigerVNCTightVNC
QEMU 或 KVM
QEMUKVMQEMU

如果希望使用虚拟机进行桌面访问,建议在虚拟机创建后在虚拟机内安装一个本地的VNC服务。这将提供一个响应更快的桌面。

RDP

RDP协议比VNC更复杂,是Guacamole官方支持的第二个协议。由于使用了缓存,RDP往往比VNC更快,Guacamole确实利用了这一点。

libguac-client-rdpguacamole-server
!注意:
除了下面RDP特定的参数外,Guacamole的RDP支持还接受Guacamole为多个协议提供的某些功能的参数:

网络参数

RDP连接需要一个定义目标计算机的主机名或IP地址。RDP端口被定义为3389,在大多数情况下都是这个值。如果不用3389端口,则只需指定RDP端口即可。

VMConnect

身份验证和安全

RDP通过用户名、密码以及可选的域参数提供身份验证。所有的RDP连接都是加密的。

如果省略用户名、密码和域参数,大多数RDP服务器将提供一个图形登录界面。一个值得注意的例外是网络级身份验证(NLA),它在桌面会话之外执行所有身份验证,因此没有图形界面。

guacd
hybridCredSSPguacdRDSTLSHyper-V/VMConnecttruetrue

剪贴板规范

与其他操作系统相比,Windows在每行末尾使用不同的字符序列。由于RDP在剪贴板中保留了行尾的格式,因此在使用非Windows计算机访问Windows时会出现问题,反之亦然。

如果使用剪贴板规范,Guacamole将自动转换剪贴板数据中的行尾,以满足远程系统想要的结果。

  • normalize-clipboard

    用于剪贴板文本的行结束规范类型(如果有)。默认情况下,不应使用行结束规范。

    可能的值有:

    • preserve

      将剪贴板中的所有行尾保持原样,不执行任何标准。这是默认设置。

    • unix

      自动将剪贴板中的所有行尾转换为Unix样式的行尾(LF)。这是Linux和Mac都使用的行尾格式。

    • windows

      自动将剪贴板中的所有行尾转换为Windows样式的行尾(CRLF)。

会话设置

RDP会话通常涉及普通用户的完整桌面环境。或者,你可以手动指定一个程序来替代RDP服务器的默认shell,或者连接到管理控制台。

虽然Guacamole与键盘布局无关,但RDP却并非如此。这是因为Guacamole根据按键的功能(“按Enter键”)表示按键,而RDP根据按键的位置(“按第二行最右边的键”)使用标识符。要在Guacamole按键事件和RDP按键事件之间转换,Guacamole必须提前知道RDP服务器的键盘布局。

qwertyJIRA
CLIENTNAMEtrueLANGUAGEREGIONVARIANTLANGUAGEREGIONVARIANTqwertyqwertzazertypt-br-qwertyen-gb-qwertyen-us-qwertyfr-fr-azertyfr-be-azertyfr-ch-qwertzde-de-qwertzde-ch-qwertzhu-hu-qwertzit-it-qwertyja-jp-qwertyno-no-qwertyes-es-qwertyes-latam-qwertysv-se-qwertytr-tr-qwertyfailsafeUnicodeIANAUNIX/Linuxguacdguacdxrdp

显示设置

Guacamole会根据浏览器窗口的大小和设备的DPI自动为RDP连接选择合适的显示大小。可以通过指定明确的宽度或高度值来强制显示大小。

为了减少带宽使用,你还可以请求服务器减少其色彩深度。除了可以绝对保证通过强制将颜色深度设置为8位的通过连接发送的图形外,Guacamole会自动检测256色图像。颜色深度由RDP服务器决定。

RDP 8.1RDP 8.1true

设备重定向

设备重定向是指在RDP上使用非显示设备。Guacamole的RDP支持目前允许重定向音频、打印和磁盘访问,其中一些需要额外的配置才能正常工作。

默认情况下,会启用音频重定向。如果正确安装了Guacamole,并且RDP服务器支持音频重定向,则声音就将在远程连接中播放,而无需手动干预。

GhostScript

Guacamole通过模拟虚拟磁盘驱动器,支持通过RDP进行文件传输。此驱动器将保留在Guacamole服务器上,限制在指定的驱动器路径内。如果在Guacamole的RDP连接上启用了驱动器重定向,用户将能够根据《使用Guacamole》中的说明进行文件上传和下载。

libguac-client-rdptruetrueAUDIO_INPUTtrueRDPEItrueGhostScriptguacdgstruedrive-pathtruefalsetruefalse\\tsclientguacdguacdtruedrive-pathdrive-pathtrueconsoletruetrueJavaScriptJavaScript

‎预连接‎PDU (Hyper-V / VMConnect)

‎某些 RDP 服务器在侦听单个 TCP 端口的单个服务器后面托管了多个逻辑 RDP 连接(访问RDP服务器上搭建的虚拟机)。若要在这些逻辑连接之间进行选择,RDP 客户端必须发送"预连接 PDU",即包含唯一标识目标的值(称为"RDP 源")的消息。此机制由 RDP 协议的‎‎"会话选择扩展"‎‎定义,并由微软的 Hyper-V 虚拟机监控程序实现。‎

preconnection-blob
PS C:\> Get-VM VirtualMachineName | Select-Object Id

Id
--
ed272546-87bd-4db9-acba-e36e1a9ca20a


PS C:\>

预连接PDU是有意通用的。虽然它主要用于选择Hyper-V背后的虚拟机,但其他RDP服务器也可以使用它。由RDP服务器本身决定是否使用预连接ID、BLOB或两者,以及它们的值的含义。

如果你确实打算使用Hyper-V,请注意其内置的RDP服务器需要不同的参数进行身份验证,而Guacamole的默认值将不起作用。在大多数情况下,连接到Hyper-V时需要执行以下操作:

usernamepasswordsecurityvmconnectvmconnectignore-certtrue
  • preconnection-id

    RDP源的数字ID。这是一个非负整数值,指示应该使用几个潜在的逻辑RDP连接中的哪一个。此参数是可选的,仅当RDP服务器记录为需要此参数时才需要此参数。如果使用Hyper-V,则应将其留空。

  • preconnection-blob

    标识RDP源的任意字符串,可能是由同一RDP服务器托管的多个逻辑RDP连接之一。此参数是可选的,仅当RDP服务器被记录为需要此参数时(如Hyper-V)才需要此参数。在所有情况下,此参数的含义对RDP协议本身是不透明的,由RDP服务器决定。对于Hyper-V,这将是目标虚拟机的ID。

远程桌面网关

微软的远程桌面服务器提供了额外的网关服务,允许将外部连接转发到无法访问的内部RDP服务器。如果要使用Guacamole通过这类网关进行连接,则需要提供描述该网关连接的附加参数,以及任何必需的凭据。

  • gateway-hostname

    作为远程桌面连接的中介的远程桌面网关的主机名。如果省略,将不使用网关。

  • gateway-port

    作为远程桌面连接的中介的远程桌面网关的端口。默认情况下,这将是"443"。‎

  • gateway-username

    ‎使用远程桌面网关进行身份验证的用户的用户名(如果正在使用网关)。这不一定与实际使用的远程桌面连接的用户相同。‎

  • gateway-password

    ‎使用远程桌面网关进行身份验证时要提供的密码(如果正在使用网关)。‎

  • gateway-domain

    ‎使用远程桌面网关进行身份验证的用户的域(如果正在使用网关)。此域不一定与实际使用远程桌面连接的用户相同。‎

负载均衡和RDP连接代理

如果你的远程桌面服务器位于负载均衡器(有时称为“连接代理”或“TS会话代理”)后面,则在连接过程中,该均衡器可能需要其他信息来确定传入连接的路由方式。RDP不规定该信息的格式,它特定于正在使用的均衡器。

.rdploadbalanceinfoinformation/cookie
  • load-balance-info

    应提供给连接代理的负载均衡信息或cookie。如果未使用连接代理,则应将其留空。

性能标志

RDP提供了几个标志,用于控制为了美观而降低性能和增加带宽的功能的可用性,例如墙纸、窗口主题、菜单效果和平滑字体。默认情况下,这些功能在Guacamole中都是禁用的,这样可以将带宽使用降至最低,但如果需要,你可以基于每个连接手动重新启用它们。

truetruetruetruetruetruetruetruetrue

RemoteApp

最新版本的Windows提供了一个名为RemoteApp的功能,允许通过RDP使用单个应用程序,而无需访问整个桌面环境。如果你的RDP服务器启用并配置了此功能,则可以配置Guacamole连接使用这些单独的应用程序。

notepad.exenotepad||notepad

添加一个RDP连接

user-mapping.xml
<connection name="Unique Name">
    <protocol>rdp</protocol>
    <param name="hostname">localhost</param>
    <param name="port">3389</param>
</connection>

Unique Namelocalhost3389

其他身份验证方法将提供描述如何配置新连接的文档。如果使用的身份验证方法完全实现了Guacamole的身份验证API的功能,那么你将能够使用Guacamole内置的管理界面轻松直观地添加一个新的RDP连接。你将不需要编辑配置文件。

SSH

与VNC或RDP不同,SSH是一种文本协议。它在Guacamole中的实现实际上是终端模拟器和SSH客户端的组合,因为SSH协议本质上不是图形化的。Guacamole的SSH支持模拟服务器端的终端,并在客户端远程绘制该终端的屏幕。

libguac-client-sshguacamole-server
!注意:
除了下面SSH特定的参数外,Guacamole的SSH支持还接受Guacamole为多个协议提供的某些功能的参数:

SSH主机验证

默认情况下,在建立SSH连接之前,Guacamole不会对主机身份进行任何验证。虽然这对于专用和受信任的网络可能是安全的,但对于具有未知或不受信任系统的大型网络或跨互联网的SSH连接而言并不完美。连接到这些主机时,存在中间人(MitM)攻击的可能性。

GUACAMOLE_HOMEssh_known_hostsknown_hosts
host-keysftp-host-key

网络参数

‎SSH 连接需要一个定义目标计算机的主机名或 IP 地址。SSH 被标准化为使用端口22,多数情况下,都是这样。如不使用标准端口,只需指定 SSH 端口即可。

known_hosts

身份验证

NONE
NONE

要让Guacamole使用公钥身份验证,它必须能够访问你的私钥,并且如果私钥需要密码短语,还必须能够访问其密码短语。如果私钥需要密码短语,但没有提供密码短语,则连接时会提示你输入密码短语。

如果没有提供私钥,Guacamole将尝试使用密码进行身份验证,从连接参数(如果提供)读取该密码,或者直接提示用户。‎

ssh-keygen

运行命令(替代shell)

chsh/etc/passwd
  • command

    要在SSH会话上执行的命令(如果有)。此参数是可选的。如果未指定,SSH会话将使用用户的默认shell。

国际化/区域设置

会话的语言通常由SSH服务器设置。如果SSH服务器允许设置相关环境变量,则可以基于每个连接覆盖该语言设置。

LANGLANGLANGTZTZTZ

SFTP

Guacamole使用SFTP(大多数SSH服务器内置的文件传输协议)通过SSH协议提供文件传输支持。如果在一个Guacamole SSH连接上启用了SFTP,用户将能够按照《使用Guacamole》中的说明那样上传和下载文件。

trueguacctltruefalsetruefalse

添加一个SSH连接

user-mapping.xml
<connection name="Unique Name">
    <protocol>ssh</protocol>
    <param name="hostname">localhost</param>
    <param name="port">22</param>
</connection>

Unique Namelocalhost22

其他身份验证方法将提供描述如何配置新连接的说明。

Telnet

libguac-client-telnetguacamole-server
!注意:
除了下面Telnet特定的参数外,Guacamole的Telnet支持还接受Guacamole为多个协议提供的某些功能的参数:

网络参数

Telnet 连接需要一个定义目标计算机的主机名或 IP 地址。 Telnet 被标准化为使用端口23,多数情况下,都是这样。如不使用标准端口,只需指定Telnet端口即可。

  • hostname

    Guacamole将要连接的Telnet服务器的主机名或IP地址

  • port

    Telnet服务器监听的端口,通常是23。该参数是可选的。如果没有指定,将使用默认的23端口。

身份验证

Telnet 实际上不提供任何标准的身份验证方法。通过 Telnet 进行的身份验证完全取决于服务器上运行的登录进程,并且是交互式的。为了解决这个问题,Guacamole提供了非标准机制来自动传递用户名和输入密码。这些机制是否有效取决于 Telnet 服务器使用的特定登录进行。

NEW-ENVIRONUSER-l
PASSWORDexpect

如果Guacamole收到一行与正则表达式匹配的文本,则会自动发送密码。如果从未收到此类行,则不会发送密码,那么用户必须手动键入密码。在此过程中按任意键都会取消启发式的密码提示检测。

password-regexPOSIX EREegrep
NEW-ENVIRONUSERPOSIX EREegrepegrepPOSIX EREegrepPOSIX EREegrep

添加一个Telnet连接

user-mapping.xml
<connection name="Unique Name">
    <protocol>telnet</protocol>
    <param name="hostname">localhost</param>
    <param name="port">23</param>
</connection>

Unique Namelocalhost23
guacdguacd

Kubernetes

Kubernetes提供了通过网络连接到容器控制台的API。与SSH和telnet一样,Guacamole的Kubernetes支持模拟服务端的终端以呈现给Guacamole客户端的显示器。

libguac-client-kubernetesguacamole-server
!注意:
除了下面Kubernetes特定的参数外,Guacamole的Kubernetes支持还接受Guacamole为多个协议提供的某些功能的参数:

网络/容器参数

podpodpod
poddefaultpodpodkubectl execkubectl attach

身份验证以及SSL/TLS

如果启用,Kubernetes将使用SSL/TLS进行加密和身份验证。标准的SSL/TLS客户端身份验证需要客户端证书和客户端密钥,Guacamole将使用它们向Kubernetes服务器标识自己。如果Kubernetes使用的证书是自签名或由非标准证书颁发机构签名的,则还需要证书颁发机构的证书。

truetrue

添加一个Kubernetes连接

user-mapping.xml
<connection name="Unique Name">
    <protocol>kubernetes</protocol>
    <param name="hostname">localhost</param>
    <param name="pod">mypod</param>
</connection>

Unique Namelocalhostmypodpod

通用配置选项

禁用剪切板访问

disable-copydisable-paste
truetrue

通过SFTP进行文件传输

Guacamole可以通过SFTP提供文件传输,即使远程桌面是通过不同的协议(如VNC或RDP)访问的。如果在Guacamole RDP连接上启用了SFTP,用户将能够按照《使用Guacamole》中的说明那样上传和下载文件。

这种支持独立于所使用的协议可能提供的文件传输,比如RDP自己的“驱动器重定向”(RDPDR),对于不支持文件传输功能的远程桌面服务器特别有用。

trueknown_hoststruefalsetruefalse

图形会话录制

guacamole-serverguacenc
NAMENAME.m4v
$ guacenc /path/to/recording/NAME

guacaenc
$ man guacenc

recording-include-keysguaclogguaclogguacenc
$ guaclog /path/to/recording/NAME
guaclog: INFO: Guacamole input log interpreter (guaclog) version 1.4.0
guaclog: INFO: 1 input file(s) provided.
guaclog: INFO: Writing input events from "/path/to/recording/NAME" to "/path/to/recording/NAME.txt" ...
guaclog: INFO: All files interpreted successfully.
$

❗重点:
Guacamole永远不会覆盖现有的录像。如有必要,将添加一个数字后缀,如“.1”、“.2”、“.3”等,以避免覆盖现有录像。如果连添加数字后缀都没有帮助,那么会话就不会被录制下来。

truerecording-pathrecording-pathrecording-pathrecordingrecording-pathtruerecording-pathtruerecording-pathtruerecording-path

文本会话录制(打字稿)

typescript-pathNAMENAME.timingNAMEtypescript-name
scriptscriptreplayNAME
$ scriptreplay NAME.timing NAME

❗重点:
Guacamole永远不会覆盖现有的录像。如有必要,将添加一个数字后缀到`NAME`,如“.1”、“.2”、“.3”等,以避免覆盖现有录像。如果连添加数字后缀都没有帮助,那么会话就不会被录制下来。

truetypescript-pathtypescript-pathtypescript-pathtypescripttypescript-pathNAMENAME.timingNAMEtypescript-nametypescript-path

控制终端行为

在大多数情况下,终端的默认行为无需修改即可工作。然而,当连接到某些系统,尤其是Linux以外的操作系统时,可能需要调整终端行为,以允许其正常运行。本节中的设置控制这种行为。

backspace^?^HDeletelinux

直接从JavaScript提供终端输入

Guacamole.ClientcreatePipeStream()STDIN
var outputStream = client.createPipeStream('text/plain', 'STDIN');

Guacamole.OutputStream
// Wrap output stream in writer
var writer = new Guacamole.StringWriter(outputStream);

// Send text
writer.sendText("hello");

// Send more text
writer.sendText("world");

// Close writer and stream
writer.sendEnd();

终端显示设置

Guacamole的终端模拟器(由SSH、telnet和Kubernetes支持使用)提供了配置所用字体及其大小的选项。在这种情况下,所选字体必须安装在服务器上,因为将字符呈现给终端显示器的是服务器,而不是客户端。

foreground: rgb:00/00/ff;
background: rgb:ff/ff/ff;
color9: rgb:80/00/80

网络唤醒

magic wake-on-lan packet
❗重点:
有几个因素会影响网络唤醒(WoL)正常运行的能力,其中许多因素不在Guacamole配置的范围之内。如果要在Guacamole中配置WoL,则还应熟悉需要配置的其他组件,以便其正常运行。

truewol-mac-addrwol-send-packet255.255.255.255

参数令牌

‎连接参数的值可以包含"令牌",使用时将被Guacamole替换。这些令牌允许连接参数的值被使用连接的用户动态改变,并提供一种转发身份验证信息的简单方法,而无需将该信息存储在连接配置本身中,只要远程桌面连接使用与 Guacamole 相同的凭据即可。‎

${TOKEN_NAME}${TOKEN_NAME:MODIFIER}TOKEN_NAMEMODIFIER
${GUAC_CLIENT_ADDRESS}YYYYMMDDYYYYMMDDHHMMSSHHMMSS

注意,每次使用连接时,这些令牌都会被动态替换。如果两个不同的用户同时访问同一个连接,则两个用户将使用不同的连接参数集彼此独立地进行连接。

令牌修饰符
:${TOKEN_NAME:MODIFIER}
  • LOWER

    将令牌的整个值转换为小写。如果用户使用大小写混合的用户名登录到Guacamole,但远程系统要求用户名为小写,则这一点非常有用。

  • UPPER

    将令牌的整个值转换为大写。

特定扩展的令牌

每个扩展还可以实现自己的任意令牌,这些令牌可以动态填充扩展提供的值。在这些扩展中,属性名被规范化为一种标准格式,由所有用下划线分隔的大写字母组成。

CAS扩展的令牌
CAS_firstnamelastnameemailmobile
${CAS_FIRSTNAME}${CAS_LASTNAME}${CAS_EMAIL}${CAS_MOBILE}
LDAP扩展的令牌
guacamole.propertiesldap-user-attributesLDAP_guacamole.properties
ldap-user-attributes: cn, givenName, sn, mobile, mail

将会产生如下可用在连接参数中的令牌:

${LDAP_CN}${LDAP_GIVENNAME}${LDAP_SN}${LDAP_MOBILE}${LDAP_MAIL}

参数提示

guacd

‎目前,将向用户触发此提示的唯一参数是 RDP 和 VNC 协议的身份验证请求,其中身份验证器未作为连接配置的一部分提供。‎

❗重点:
请务必注意,只有在尚未作为连接的一部分提供该信息的情况下,才会生成对参数的请求。绝不会要求用户提供替换或覆盖已提供值的连接参数那种参数,包括身份验证信息。

例如,如果与RDP服务器的连接配置指定了用户名和密码,且该用户名或密码不正确并导致身份验证失败,则 Guacamole 不会提示用户输入其他凭据。对于强制实施NLA的RDP服务器,这将导致连接失败。其他RDP服务器的行为可能有所不同,并允许用户尝试其他凭据,但这超出了Guacamole的控制范围,Guacamole不会使用用户的输入覆盖预配置的身份验证值。

配置guacd

guacd.conf

guacdguacd.conf/etc/guacamoleINI
#
# guacd configuration file
#

[daemon]

pid_file = /var/run/guacd.pid
log_level = info

[server]

bind_host = localhost
bind_port = 4822

#
# The following parameters are valid only if
# guacd was built with SSL support.
#

[ssl]

server_certificate = /etc/ssl/certs/guacd.crt
server_key = /etc/ssl/private/guacd.key

参数/值=
guacd.conf##

如果你需要在参数值中指定特殊字符,比如空格或任何上述符号,可以将参数放在双引号中。

[ssl]

# Whitespace is legal within double quotes ...
server_certificate = "/etc/ssl/my certs/guacd.crt"

# ... as are other special symbols
server_key = "/etc/ssl/#private/guacd.key"

\
# Parameter value containing a double quote
parameter = "some\"value"

# Parameter value containing newline characters
parameter2 = "line1\
line2\
line3"

# Parameter value containing backslashes
parameter3 = "c:\\windows\\path\\to\\file.txt"

guacd
#\"\#\
[daemon]
guacdguacdguacdguacdinfotracedebuginfowarningerror
[server]
guacdguacdlocalhostguacdguacd
[ssl]
guacamole.propertiesguacamole.properties

命令行选项

guacd
HOSTguacdguacd.conf[server]bind_hostPORTguacdguacd.conf[server]bind_portPIDFILEguacdguacd.conf[daemon]pid_fileLEVELguacdtracedebuginfowarningerrorinfoguacd.conf[daemon]log_levelguacd
guacd