通过 ssh 手动重定向 X 输出

通过 ssh 手动重定向 X 输出

我有一个远程服务器,我可以使用 ssh 登录。但是我的用户没有主目录。

当我尝试ssh -X连接到该服务器时,ssh 尝试将一个 cookie 放入其中~/.Xauthority,但显然失败了,因此不可能有 X 输出。

据我所知,没有办法指定不同的文件来保存 cookie。

因此我尝试在临时家中手动设置:

mkdir -p /tmp/myhome
cd /tmp/myhome
export HOME=$PWD
xauth add $DISPLAY . $COOKIE
xlogo # test setup

理论上,ssh 应该正确设置隧道并设置 $DISPLAY,唯一缺少的是 $COOKIE 的正确值。

另一台服务器上显示的值xauth list(类似ffb3c8b945442b70146f7158861f1a54)在这台服务器上似乎无效。

问题:

  • 为什么在一台服务器上工作的 cookie 在另一台服务器上不起作用?
  • 在我的情况下如何获得有效的 cookie?
  • 在这种情况下,是否有更简单的方法来设置 xforwarding? (除了获取正确的主目录或使用未加密的xhost连接)

答案1

OpenSSH 提供了另一种在协议端设置 X cookie 的方法:sshrc文件。此文件可以是~/.ssh/rc/etc/ssh/sshrc(或/etc/sshrc或其他位置,具体取决于服务器配置)。手册提供了该文件中用于手动设置 cookie 的代码片段。除非您的服务器/bin/sh是 POSIX 之前的古董,否则您可以将此代码简化为

if read proto cookie && [ -n "$DISPLAY" ]; then
  echo "add unix:${DISPLAY#localhost:} $proto $cookie" | xauth -q -
fi

该手册建议将此代码放在一些设置主目录的代码之后 - 在您的情况下,您需要设置HOME环境变量,可能首先为其创建一个临时目录。

您的代码类似,但保留localhost:在显示的开头,如果服务器未侦听 TCP 连接,则该代码将不起作用。表单的显示localhost:10并不等同于:10,尽管如果两者都工作,它们具有类似的效果:具有主机名的表单通过 TCP 连接,而没有主机名的表单使用 Unix 套接字,这可能是所有可用的(即使 TCP 可用,它也允许优化,但我怀疑当连接通过 TCP 通过 SSH 中继时,这些优化是否会起作用)。

更喜欢echo add … | xauth -而不是xauth add …因为另一个用户窥探您创建的进程可能会捕获xauth命令行。由于echo是内置的 shell,他们将无法使用表单恢复 cookie echo add …

相关内容