“获取”(即在本地绘制)远程运行的 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
ssh -Y
像您自己一样连接到远程计算机。- 到达那里后,输入
xauth list
.将出现 MAGIC-COOKIE 项目列表。您的登录会话很可能位于列表的底部。 (通过查看主机名和 UNIX 数字代码,并将其与您从中脱壳的主机名和当前的 localhost:## DISPLAY env 变量进行比较来检查这一点。) - 切换用户。
- 从上方键入
xauth add
+ 整个 MAGIC-COOKIE 行。 - 现在应该出现图形。使用快速测试它
xlogo
。
答案3
我喜欢兰迪的回答,但它对我来说不太有效。
这是我要做的工作:
ssh -Y as user1
xauth list | grep `uname -n`
- 切换到用户2
unset XAUTHORITY
xauth generate :0 .
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。