通过 SSH 和 su 进行 X11 转发

通过 SSH 和 su 进行 X11 转发

对我来说,很奇怪的是,当使用带有 X11 转发的 ssh 连接时,用户和 root 能够看到xclock,但另一个用户却看不到。为什么?

mahmood@cluster:~$ xclock
^C
mahmood@cluster:~$ su
Password:
root@cluster:mahmood# xclock
^C
root@cluster:mahmood# su - hmousavi
hmousavi@cluster:~$ xclock
MobaXterm X11 proxy: Authorisation not recognised
Error: Can't open display: localhost:10.0
hmousavi@cluster:~$

PS:^C意味着我能够看到该xclock窗口,因此我按下^C返回终端。

答案1

连接到 X11 显示器需要两条信息:显示器名称(通常在DISPLAY环境变量中传递)和曲奇饼,这是每个应用程序在连接时必须显示的显示器密码。通常,cookie 存储在 中~/.Xauthority,但也可以存储在XAUTHORITY环境变量指示的不同文件中。

看来DISPLAYSSH 设置的值被两次调用保留了su。然而 cookie 位于~mahmood/.Xauthority;当您以 hmousavi 运行程序时,程序会在其中查找 cookie~hmousavi/.Xauthority并找到不同的值。

原则上您可以运行XAUTHORITY=~mahmood/.Xauthority xclock,但 hmousavi 可能没有读取该文件的权限 -.Xauthority其他用户不应该读取该文件。您可以使用该xauth命令两次,一次作为 mahmood 来提取 cookie 值 ( xauth list localhost:10.0),一次作为 hmousavi 来导入该值 ( xauth merge),但这很麻烦。让 X11 应用程序工作的最简单方法是全程使用 SSH,因为 SSH 会自动设置 X11 转发:

mahmood@cluster:~$ ssh -X hmousavi@localhost
hmousavi@cluster:~$ xclock

将 mahmood 的 SSH 公钥添加到 hmousavi 中.ssh/authorized_keys以允许此操作。

相关内容