ssh X11 转发问题

ssh X11 转发问题

我已经输入了ForwardX11我的~/.ssh/config,然后我启动了一个像这样的 X11 应用程序:

ssh -f user@host 'someapp; sleep 1'

这很好用。

该应用程序someapp有一个按钮,可通过 shell 脚本打开查看器应用程序viewer.sh。当我按下按钮时,查看器就会出现。

这一切都很好,正如预期的那样,但如果我这样做

ssh -2 -f user@host 'someapp; sleep 1'

有麻烦了。 someapp开始一切顺利,但如果我单击按钮,查看器就不会出现。

由于查看器是通过 shell 脚本调用的,我将调用替换为xclock,情况完全相同 - 我认为查看器不应该受到指责。Linux 和 AIX 上的情况相同。

我需要的原因 -2是我最终想使用连接多路复用,而这只适用于版本 2。原因是sleep 1否则它不起作用;-)

更令人困惑的是,

ssh -2 -f user@host 'xterm &; app; sleep 1' 

只要 xterm 处于打开状态,查看器就可以正常工作。当我关闭 xterm 时,ssh -v输出以下内容

debug1: channel 1: FORCE input drain
debug1: channel 0: free: client-session, nchannels 3
debug1: channel 1: free: x11, nchannels 2

从那一刻起,当我按下按钮时,查看器就不会出现。

我还用将变量写入文件的脚本替换了查看器应用程序 $DISPLAY。变量始终正确设置。

答案1

您启动的 SSH 连接仅在以下时间内保持有效:

  1. 您指定的命令正在运行。
  2. 有活动的 X11 连接。

在您的情况下,当您指定“someapp; sleep 1”时,这意味着在“someapp”退出后,有一个 1 秒的时间窗口,在此期间必须建立新的 X11 连接,然后才能终止连接。

如果某个应用程序在后台启动了另一个应用程序,而该应用程序稍后才会连接到 X 显示器,那么 SSH 本身无法知道何时应该终止 - 因此您需要想办法向其提供该信息。例如,包装器脚本直到启动器生成的程序退出后才会退出。

或者只是说“睡一天”然后开心就好。

答案2

您是否尝试过使用?ForwardX11Trusted来代替允许“受信任”连接的较新选项。这意味着您的本地 X 服务器将允许远程连接执行更多操作。ForwardX11ForwardX11Trusted

本文更详细地讨论了发生了什么,以及如果你使用它,你可能会遇到什么困难ForwardX11

答案3

您还必须在服务器端启用 AllowX11Forwarding。对于 SSH1 来说,可能不需要/不使用此功能。

详细信息看这里

相关内容