Linux Virtual Delivery Agent

会话影子处理

通过重影会话功能,域管理员可以在 Intranet 中查看用户的 ICA 会话。该功能使用 noVNC 连接到 ICA 会话。

注意:

要使用该功能,请使用 Citrix Director 7.16 或更高版本。

安装和配置

依赖项

会话重影需要两个新的依赖关系 python-websockifyx11vnc。在安装 Linux VDA 后手动安装 python-websockifyx11vnc

对于 RHEL 7.x 和 Amazon Linux2:

请运行以下命令以安装 python-websockifyx11vncx11vnc 版本 0.9.13 或更高版本):

sudo pip3 install websockify
sudo yum install x11vnc
<!--NeedCopy-->

(适用于 RHEL 7.x) 通过启用企业版 Linux 的额外软件包 (EPEL) 和可选 RPM 存储库来解析 python-websockifyx11vnc

  • EPEL

    x11vnc 需要 EPEL 存储库。请运行以下命令以启用 EPEL 存储库:

     yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
     <!--NeedCopy-->
    
  • 可选 RPM

    要启用可选的 RPMs 存储库以安装 x11vnc 的一些依赖项软件包,请运行以下命令:

     subscription-manager repos --enable rhel-7-server-optional-rpms --enable rhel-7-server-extras-rpms
     <!--NeedCopy-->
    

对于 RHEL 9.2/9.0/8.x 和 Rocky Linux 9.2/9.0/8.x:

请运行以下命令以安装 python-websockifyx11vncx11vnc 版本 0.9.13 或更高版本)。

sudo pip3 install websockify
sudo yum install x11vnc
<!--NeedCopy-->

通过启用 EPEL 和 CodeReady Linux Builder 存储库解析 x11vnc

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-->

对于 Ubuntu:

请运行以下命令以安装 python-websockifyx11vncx11vnc 版本 0.9.13 或更高版本):

sudo pip3 install websockify
sudo apt-get install x11vnc
<!--NeedCopy-->

对于 SUSE:

请运行以下命令以安装 python-websockifyx11vncx11vnc 版本 0.9.13 或更高版本):

sudo pip3 install websockify
sudo zypper install x11vnc
<!--NeedCopy-->

对于 Debian:

请运行以下命令以安装 python-websockifyx11vncx11vnc 版本 0.9.13 或更高版本):

sudo pip3 install websockify
sudo apt-get install x11vnc
<!--NeedCopy-->

端口

会话重影功能会自动选择 6001-6099 内的可用端口来建立从 Linux VDA 到 Citrix Director 的连接。因此,可以并行重影的 ICA 会话数不应超过 99 个。请确保有足够的端口可用来满足您的要求,尤其是多会话重影。

注册表

下表列出了相关注册表:

注册表 说明 默认值
EnableSessionShadowing 启用或禁用会话重影功能 1(启用)
ShadowingUseSSL 确定是否对 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 协议。对于会话重影,将根据前面提及的“ShadowingUseSSL”注册表来选择 ws://wss://。默认情况下,选择 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) 字段。要解决此问题,请提供包含 SAN 字段的扩展属性(X509 v3 扩展程序)的证书。

在每个 Citrix Director 客户端上安装根证书

会话重影与 IIS 使用相同的基于注册表的证书存储,因此您可以使用 IIS 或 Microsoft 管理控制台 (MMC) 证书管理单元安装根证书。收到 CA 的证书后,可在 IIS 中重新启动 Web 服务器证书向导,然后此向导将安装该证书。另外,您可以在使用 MMC 并将证书作为独立的管理单元添加的计算机上,查看并导入证书。默认情况下,Internet Explorer 和 Google Chrome 会导入安装在操作系统上的证书。对于 Mozilla Firefox,必须在证书管理器的 Authorities(颁发机构)选项卡上导入您的根 SSL 证书。

在每台 Linux VDA 服务器上安装服务器证书及其密钥

将服务器证书命名为“shadowingcert.*”,并将密钥文件命名为“shadowingkey.*”(* 指示格式,例如 shadowingcert.pem 和 shadowingkey.key)。将服务器证书和密钥文件放在路径 /etc/xdl/shadowingssl 下,并使用受限权限适当地对其进行保护。如果名称或路径不正确,Linux VDA 将无法找到特定的证书或密钥文件,从而导致与 Citrix Director 的连接失败。

使用情况

Citrix Director 中,找到目标会话,然后单击会话详细信息视图中的重影以向 Linux VDA 发送重影请求。

重影选项卡

连接初始化后,ICA 会话客户端(不是 Citrix Director 客户端)上会显示一条确认消息,要求用户允许对会话进行重影。

是否允许管理员重影本次会话

如果用户单击,则 Citrix Director 端将显示一个窗口,指示正在重影 ICA 会话。

有关用法的详细信息,请参阅 Citrix Director 文档

限制

  • 会话重影仅适用于 Intranet。它不适用于外部网络,即使通过 Citrix Gateway 连接也是如此。Citrix 拒绝承担在外部网络中进行 Linux VDA 会话重影的任何责任。
  • 启用了会话重影后,域管理员只能查看 ICA 会话,但无权对其写入或控制。
  • 管理员在 Citrix Director 中单击重影后,系统会显示一条确认消息,要求用户允许对会话进行重影。只有在会话用户允许后才能对会话进行重影。
  • 前面提及的确认消息有超时限制,即 20 秒。超时后,重影请求将失败。
  • 一个会话只能由一位管理员进行重影。例如,如果管理员 B 向会话管理员 A 发送重影请求,获取用户权限的确认信息会重新出现在用户设备上。如果用户同意,管理员 A 的重影连接将停止,并为管理员 B 构建新的重影连接。如果管理员为同一会话发送另一个重影请求,还可以构建新的重影连接。
  • 要使用会话重影功能,请安装 Citrix Director 7.16 或更高版本。
  • Citrix Director 客户端使用 FQDN 而不是 IP 地址来连接到目标 Linux VDA 服务器。因此,Citrix Director 客户端必须能够解析 Linux VDA 服务器的 FQDN。

故障排除

如果会话重影失败,请在 Citrix Director 客户端和 Linux VDA 上进行调试。

在 Citrix Director 客户端上

通过浏览器的开发人员工具,在控制台选项卡上检查输出日志。或者在网络选项卡上检查 ShadowLinuxSession API 的响应。如果显示获取用户权限的确认信息,但连接建立失败,请手动 ping VDA 的 FQDN 以验证 Citrix Director 是否能够解析 FQDN。如果 wss:// 连接出现问题,请检查您的证书。

在 Linux VDA 上

  1. 检查 /var/log/xdl/vda.log 文件中是否包含线索。

  2. 编辑 /var/xdl/sessionshadowing.sh 文件并更改“logFile”变量以指定一个日志文件,该日志文件可以在从 Director 进行会话重影操作时针对线索量身定制。

  3. 此外,您可以手动验证您的证书在 noVNC 连接中是否正常运行:

    1. 运行 ps aux | grep xorg 以查找当前会话的 Xorg 显示编号 <display-num>,例如 :3

    2. 运行以下命令启动 x11vnc 服务器并等待传入连接。

      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-->
      
    3. 尝试使用 noVNC 进行连接以验证 SSL 模式,如下所示。输入您的 VDA 的 FQDN 和端口号。在此示例中,端口号为 6009。

      使用 noVNC 进行连接

    4. 解决 VDA 上的 Websockify 打印的或者客户端上的浏览器报告的任何错误。

      建立连接过程中的关键检查点:

      1. 检查是否有任何防火墙限制阻止会话重影打开端口。
      2. 在使用 SSL 的情况下,确认您已正确命名证书和密钥文件,并将其置于正确的路径下。
      3. 确认 6001-6099 之间是否有足够的端口用于新的重影请求。
      4. 验证“netstat”是否已安装,因为它是 /var/xdl/sessionshadowing.sh 必需的。
      5. 运行 openssl x509 -in shadowingcert.pem -text -noout 以验证证书配置是否正确,特别注意 CN 和 SAN 字段。
      6. 在 RHEL 8 上,可能存在找不到 rebind.so 的问题。要解决此问题,请运行以下命令:

        ln -s /usr/bin/rebind.so /usr/local/bin/rebind.so
        <!--NeedCopy-->
        
会话影子处理