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) 通过启用 Enterprise 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

    请运行以下命令以启用可选 RPM 存储库,从而安装 x11vnc 的某些依赖软件包:

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

对于 RHEL 9.4/9.3/9.2/9.0/8.x 和 Rocky Linux 9.4/9.3/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 协议。 对于会话影子处理,选择 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) 字段。 要解决此问题,请提供包含 SAN 字段的扩展属性(扩展名为 X509 v3)的证书。

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

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

重影选项卡

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

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

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

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

限制

  • 如果您的 VDA 已加入域并托管在 Microsoft Azure 上使用 Azure Active Directory (AAD) 进行身份验证,会话影子处理功能将不起作用。
  • 会话重影仅适用于 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 服务器并等待建立传入连接。

      注意:

      在运行以下命令之前,请设置 $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-->
      
    3. 尝试使用 noVNC 建立连接以验证 SSL 模式,如下所示。 输入您的 VDA 的 FQDN 和端口号。 在此示例中,端口号为 6009。

      使用 noVNC 建立连接

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

      建立连接期间的关键检查点:

      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-->
        
会话影子处理