Linux Virtual Delivery Agent

会话影子

会话影子功能允许域管理员在内网中查看用户的 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.1/9.0/8.x 和 Rocky Linux 9.1/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

请咨询您组织的安全团队,了解他们获取证书所需的方法。

重要提示

  • 服务器证书的公用名 (Common Name) 必须是 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 extensions) 证书。

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

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

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

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

用法

Citrix Director 中,找到目标会话,然后单击会话详细信息 (Session Details) 视图中的Shadow,向 Linux VDA 发送 shadowing 请求。

Shadow 选项卡

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

是否允许管理员 Shadow 此会话

如果用户单击是 (Yes)Citrix Director 端将出现一个窗口,指示 ICA 会话正在被 shadowing。

有关用法的更多信息,请参阅 Citrix Director 文档

限制

  • 会话 shadowing 仅设计用于内部网络。即使通过 Citrix Gateway 连接,它也不适用于外部网络。Citrix 不对外部网络中的 Linux VDA 会话 shadowing 承担任何责任。
  • 启用会话 shadowing 后,域管理员只能查看 ICA 会话,但无权写入或控制它。
  • 管理员从 Citrix Director 单击Shadow 后,会出现一个确认,请求用户允许 shadowing 会话。只有当会话用户授予权限时,才能 shadowing 会话。
  • 前面提到的确认有 20 秒的超时限制。当时间用完时,shadowing 请求将失败。
  • 一个会话只能由一个管理员 shadowing。例如,如果管理员 B 对管理员 A 正在 shadowing 的会话发送 shadowing 请求,则获取用户权限的确认将重新出现在用户设备上。如果用户同意,管理员 A 的 shadowing 连接将停止,并为管理员 B 建立新的 shadowing 连接。如果管理员对同一会话发送另一个 shadowing 请求,也可以建立新的 shadowing 连接。
  • 要使用会话 shadowing,请安装 Citrix Director 7.16 或更高版本。
  • Citrix Director 客户端使用 FQDN 而不是 IP 地址连接到目标 Linux VDA 服务器。因此,Citrix Director 客户端必须能够解析 Linux VDA 服务器的 FQDN。

故障排除

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

在 Citrix Director 客户端上

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

在 Linux VDA 上

  1. 检查 /var/log/xdl/vda.log 文件以查找线索。

  2. 编辑 /var/xdl/sessionshadowing.sh 文件,并更改 ‘logFile’ 变量以指定一个日志文件,该文件可以在从 Director 进行会话 shadowing 期间进行跟踪以查找线索。

  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. 解决 Websockify 在 VDA 上打印的或浏览器在客户端上报告的任何错误。

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

      1. 检查是否存在阻止会话 shadowing 打开端口的任何防火墙限制。
      2. 如果是 SSL 场景,请验证您是否正确命名了证书和密钥文件,并将它们放在正确的路径下。
      3. 验证 6001-6099 之间是否有足够的端口可用于新的 shadowing 请求。
      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-->
        
会话影子