如何 ssh -Y 然后 su -并仍然将 X 应用程序转发到您的本地计算机

如何 ssh -Y 然后 su -并仍然将 X 应用程序转发到您的本地计算机

“获取”(即在本地绘制)远程运行的 Linux 应用程序非常容易:如果我ssh -Y到远程计算机并运行一个应用程序,该应用程序肯定会在我的本地桌面上弹出。

但是,如果当我在远程计算机中通过 ssh 连接su到其他用户时,我将无法将 X 应用程序转发到本地计算机。它说wrong authentication

我不知道如何处理这个案子。仍然是echo $DISPLAY正确的(由初始ssh -Y登录设置),但会话 cookie 可能仅为登录 ssh 的初始用户设置。

我怎样才能克服这个困难并转发从不同用户运行的其他X应用程序?

我不直接 ssh 的原因是因为我不希望通过 ssh 访问该用户(它是“virtualbox”用户,这显然是尝试 ssh 到该服务器的机器人的一个简单目标)...

答案1

当您通过 ssh 连接到启用了 X11 转发的删除计算机时,服务器上的 ssh 会.Xauthority在用户的主目录中创建一个文件。由于 ssh 侦听 TCP 套接字上的 X11,因此任何人都可以连接。由于任何人都可以连接,因此我们需要某种方法来防止任何人使用您的显示器。这是使用该.Xauthority文件完成的。该文件包含一个“cookie”,该“cookie”会呈现给 X11 服务器,以验证是否允许客户端连接。

跳过所有细节,如果您将该.Xauthority文件复制到目标用户的主目录(并授予他们所有权),您应该能够连接。

答案2

  1. ssh -Y像您自己一样连接到远程计算机。
  2. 到达那里后,输入xauth list.将出现 MAGIC-COOKIE 项目列表。您的登录会话很可能位于列表的底部。 (通过查看主机名和 UNIX 数字代码,并将其与您从中脱壳的主机名和当前的 localhost:## DISPLAY env 变量进行比较来检查这一点。)
  3. 切换用户。
  4. 从上方键入xauth add+ 整个 MAGIC-COOKIE 行。
  5. 现在应该出现图形。使用快速测试它xlogo

答案3

我喜欢兰迪的回答,但它对我来说不太有效。

这是我要做的工作:

  1. ssh -Y as user1
  2. xauth list | grep `uname -n`
  3. 切换到用户2
  4. unset XAUTHORITY
  5. xauth generate :0 .
  6. xauth add :0 . <KEY-FROM-STEP-2>

请注意步骤 5 和 6 中的两个句点。

如果我只是按照 Randy 的回答,user2 的XAUTHORITY变量仍然指向 user1 的.Xauthority文件。他的+键语法不起作用。

答案4

虽然我发现这非常有帮助,但我还必须导出 $DISPLAY,如下所示:

作为第一个用户

# $xauth list $DISPLAY
<<<<<<<<FULL COOKIE TEXT>>>>>>>>>>>
# echo $DISPLAY
    <localhost:11.0>

作为第二个用户

# xauth add <<<<<<<<FULL COOKIE TEXT>>>>>>>>>>>
# export DISPLAY=<localhost:11.0>

注:我的系统是Red Hat 7。

相关内容