会话会影功能
会话跟踪允许域管理员在内网中查看用户的 ICA® 会话。此功能使用 noVNC 连接到 ICA 会话。
注意:
要使用此功能,请使用
Citrix Director7.16 或更高版本。
安装和配置详细信息
依赖项
会话跟踪需要两个新的依赖项:python-websockify 和 x11vnc。安装 Linux VDA 后,请手动安装 python-websockify 和 x11vnc。
对于 Amazon Linux2 操作系统平台而言,请注意:
运行以下命令以安装 python-websockify 和 x11vnc(x11vnc 版本 0.9.13 或更高版本):
sudo pip3 install websockify
sudo yum install x11vnc
<!--NeedCopy-->
对于红帽企业版 Linux 9.x/8.x 和 Rocky Linux 9.x/8.x 操作系统平台而言,请注意:
运行以下命令以安装 python-websockify 和 x11vnc(x11vnc 版本 0.9.13 或更高版本)。
sudo pip3 install websockify
sudo yum install x11vnc
<!--NeedCopy-->
Resolve x11vnc by enabling the EPEL and CodeReady Linux Builder repositories:
dnf install -y --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
subscription-manager repos --enable "codeready-builder -for-rhel-8-x86_64-rpms"
<!--NeedCopy-->
For Ubuntu:
运行以下命令以安装 python-websockify 和 x11vnc(x11vnc 版本 0.9.13 或更高版本):
sudo pip3 install websockify
sudo apt-get install x11vnc
<!--NeedCopy-->
适用于 SUSE:
首先,使用 YaST 或以下 SUSEConnect 命令启用“SUSE Linux 企业版 工作站扩展 15 SP6”模块:
suseconnect -p sle-we/15.6/x86_64 -r <regcode>
<!--NeedCopy-->
有关详细信息,请参阅 SUSE 文档:https://documentation.suse.com/zh-cn/sles/15-SP6/html/SLES-all/article-modules.html。
然后,运行以下命令安装 python-websockify 和 x11vnc(x11vnc 0.9.13 或更高版本):
sudo pip3 install websockify
sudo zypper install x11vnc
<!--NeedCopy-->
适用于 Debian 12 版本:
运行以下命令安装 python-websockify 和 x11vnc(x11vnc 0.9.13 或更高版本):
apt install python3-websockify
sudo apt-get install x11vnc
<!--NeedCopy-->
适用于 Debian 11 版本:
运行以下命令安装 python-websockify 和 x11vnc(x11vnc 0.9.13 或更高版本):
sudo pip3 install websockify
sudo apt-get install x11vnc
<!--NeedCopy-->
端口
会话影子功能会自动从 6001-6099 范围内选择可用端口,以建立从 Linux VDA 到 Citrix Director 的连接。因此,您可以同时进行影子操作的 ICA 会话数量限制为 99 个。请确保有足够的端口可用以满足您的要求,特别是对于多会话影子操作。
注册表
下表列出了相关的注册表:
| 注册表 | 详细说明 | 默认设置值 |
|---|---|---|
| 启用会话跟踪 | 用于启用或禁用会话投影功能 | 1(已启用) |
| 会话跟踪使用SSL | 决定是否对 Linux VDA 与 Citrix Director 之间的连接进行加密 | 0(已禁用) |
在 Linux VDA 上运行 ctxreg 命令以更改注册表值。例如,要禁用会话投影,请运行以下命令:
/opt/Citrix/VDA/bin/ctxreg update -k "HKLM\Software\Citrix\VirtualDesktopAgent" -v "EnableSessionShadowing" -d "0x00000000"
<!--NeedCopy-->
SSL
Linux VDA 与 Citrix Director 之间的 noVNC 连接使用 WebSocket 协议。对于会话投影,选择 ws:// 还是 wss:// 取决于前面提到的“ShadowingUseSSL”注册表。默认情况下,选择 ws://。但是,出于安全原因,我们建议您使用 wss:// 并在每个 Citrix Director 客户端和每个 Linux VDA 服务器上安装证书。Citrix 不承担因使用 ws:// 而导致的 Linux VDA 会话投影的任何安全责任。
要启用 SSL,请运行以下命令:
/opt/Citrix/VDA/bin/ctxreg update -k "HKLM\Software\Citrix\VirtualDesktopAgent" -v "ShadowingUseSSL" -d "0x00000001"
<!--NeedCopy-->
获取服务器和根 SSL 证书
证书必须由受信任的证书颁发机构 (CA) 签名。
对于要配置 SSL 的每个 Linux VDA 服务器,都需要一个单独的服务器证书(包括密钥)。服务器证书用于标识特定计算机,因此您必须知道每个服务器的完全限定域名 (FQDN)。为方便起见,可以考虑为整个域使用通配符证书。
与 Linux VDA 通信的每个 Citrix Director 客户端也需要一个根证书。根证书可从颁发服务器证书的同一 CA 获取。
您可以从以下 CA 安装服务器和客户端证书:
- 一个随您的操作系统捆绑的 CA
- 企业 CA(您的组织向您提供访问权限的 CA)
- 未与您的操作系统捆绑的 CA
请咨询您组织的安全团队,以了解他们要求采用哪种方法来获取证书。
重要提示:
- 服务器证书的公用名必须是 Linux VDA 的精确 FQDN,或者至少是正确的通配符加域字符。例如,vda1.basedomain.com 或 *.basedomain.com。
- 包括 SHA1 和 MD5 在内的哈希算法对于数字证书中的签名来说太弱,某些浏览器不支持。因此,SHA-256 被指定为最低标准。
- Chrome 已停止接受自签名 SSL 证书,认为它们不安全。
NET::ERR_CERT_COMMON_NAME_INVALID错误发生是因为生成的证书缺少 SAN (subjectAltName) 字段。要解决此问题,请提供包含扩展属性(X509 v3 扩展)且包含 SAN 字段的证书。
在每个 Citrix Director 客户端上安装根证书
会话 shadowing 使用与 IIS 相同的基于注册表的证书存储,因此您可以使用 IIS 或 Microsoft 管理控制台 (MMC) 证书管理单元安装根证书。当您从 CA 收到证书时,可以重新启动 IIS 中的 Web 服务器证书向导,向导将安装证书。或者,您可以使用 MMC 在计算机上查看和导入证书,并将证书添加为独立管理单元。Internet Explorer 和 Google Chrome 默认导入安装在您操作系统上的证书。对于 Mozilla Firefox,您必须在证书管理器颁发机构选项卡上导入您的根 CA 证书。
在每个 Linux VDA 服务器上安装服务器证书及其密钥
将服务器证书命名为“shadowingcert.*”,将密钥文件命名为“shadowingkey.*”(* 表示格式,例如 shadowingcert.pem 和 shadowingkey.key)。将服务器证书和密钥文件放置在路径 /etc/xdl/shadowingssl 下,并使用受限权限对其进行适当保护,仅允许 ctxsrvr 具有读取访问权限。不正确的名称或路径会导致 Linux VDA 无法找到特定的证书或密钥文件,从而导致与 Citrix Director 的连接失败。命令如下:
cp <vda's-public-key> /etc/xdl/shadowingssl/shadowingcert.pem
cp <vda's-server-private-key> /etc/xdl/shadowingssl/shadowingkey.key
sudo chown ctxsrvr:ctxadm /etc/xdl/shadowingssl/shadowingcert.pem
sudo chown ctxsrvr:ctxadm /etc/xdl/shadowingssl/shadowingkey.key
<!--NeedCopy-->
用法
从 Citrix Director 中,找到目标会话,然后在会话详细信息视图中单击Shadow(影子)以向 Linux VDA 发送 shadowing 请求。

连接初始化后,ICA 会话客户端(而非 Citrix Director 客户端)上会出现一个确认,请求用户允许 shadowing 会话。

如果用户单击是,则 Citrix Director 侧会显示一个窗口,指示 ICA 会话正在被会话协助。
有关用法详细信息,请参阅 Citrix Director 文档。
局限性
- 如果您的 VDA 已加入域,并且使用 Azure Active Directory (AAD) 进行身份验证托管在 Microsoft Azure 上,则会话协助功能不起作用。
- 会话协助仅设计用于 Intranet。它不适用于外部网络,即使通过 Citrix Gateway 连接也不行。Citrix 不对外部网络中的 Linux VDA 会话协助承担任何责任。
- 启用会话协助后,域管理员只能查看 ICA 会话,但无权写入或控制它。
- 管理员从
Citrix Director单击会话协助后,将显示一个确认,请求用户允许会话协助该会话。只有当会话用户授予权限时,才能会话协助会话。 - 前面提到的确认具有 20 秒的超时限制。当时间用完时,会话协助请求将失败。
- 一个会话只能由一个管理员会话协助。例如,如果管理员 B 对管理员 A 正在会话协助的会话发送会话协助请求,则获取用户权限的确认将重新出现在用户设备上。如果用户同意,则管理员 A 的会话协助连接将停止,并为管理员 B 建立新的会话协助连接。如果管理员对同一会话发送另一个会话协助请求,也可以建立新的会话协助连接。
- 要使用会话协助,请安装
Citrix Director7.16 或更高版本。 - 一个
Citrix Director客户端使用 FQDN 而不是 IP 地址连接到目标 Linux VDA 服务器。因此,Citrix Director客户端必须能够解析 Linux VDA 服务器的 FQDN。
故障排除
如果会话协助失败,请在 Citrix Director 客户端和 Linux VDA 上进行调试。
在 思杰 Director 客户端上
通过浏览器的开发人员工具,检查控制台选项卡上的输出日志。或者,检查网络选项卡上 ShadowLinuxSession API 的响应。如果出现获取用户权限的确认,但连接建立失败,请手动 ping VDA 的 FQDN 以验证 Citrix Director 是否可以解析 FQDN。如果 wss:// 连接存在问题,请检查您的证书。
在 Linux 虚拟投递代理上
-
检查
/var/log/xdl/vda.log文件以查找线索。 -
编辑
/var/xdl/sessionshadowing.sh文件并更改 ‘logFile’ 变量,以指定一个可在从 Director 进行会话影射期间跟踪日志的文件,从而查找线索。 -
此外,您可以手动验证您的证书是否与 noVNC 连接正常工作:
-
请您务必运行 ps aux | grep xorg 这条命令,以便查找当前会话所使用的 Xorg 显示编号 $display-num。举例来说,该编号通常会显示为 :3 这样的形式。
-
运行以下命令以启动 x11vnc 服务器并等待传入连接。
注意:
在运行以下命令之前,请设置 $passwd、$port、$display-num 变量。
runuser -l "ctxsrvr" -s /bin/bash -c "websockify <port> -v --cert /etc/xdl/shadowingssl/shadowingcert.pem --key /etc/xdl/shadowingssl/shadowingkey.key -- x11vnc -viewonly -shared -passwd $passwd -rfbport $port -display $display-num -many -o /var/log/xdl/x11vnc.log" <!--NeedCopy--> -
尝试使用 noVNC 连接以按如下方式验证 SSL 模式。输入 VDA 的 FQDN 和端口号。在此示例中,端口号为 6009。

-
解决 Websockify 在 VDA 上打印的或浏览器在客户端上报告的任何错误。
连接建立期间的关键检查点:
- 检查是否存在阻止会话影射打开端口的任何防火墙限制。
- 如果是 SSL 场景,请验证您是否已正确命名证书和密钥文件,并将其放置在正确的路径下。
- 验证 6001-6099 之间是否还有足够的端口用于新的会话投影请求。
- 运行
openssl x509 -in shadowingcert.pem -text -noout以验证证书是否配置正确,特别注意 CN 和 SAN 字段。 -
在 RHEL 8 上,可能会出现找不到
rebind.so的问题。要解决此问题,请运行以下命令:ln -s /usr/bin/rebind.so /usr/local/bin/rebind.so <!--NeedCopy-->
-