我已经输入了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 连接仅在以下时间内保持有效:
- 您指定的命令正在运行。
- 有活动的 X11 连接。
在您的情况下,当您指定“someapp; sleep 1”时,这意味着在“someapp”退出后,有一个 1 秒的时间窗口,在此期间必须建立新的 X11 连接,然后才能终止连接。
如果某个应用程序在后台启动了另一个应用程序,而该应用程序稍后才会连接到 X 显示器,那么 SSH 本身无法知道何时应该终止 - 因此您需要想办法向其提供该信息。例如,包装器脚本直到启动器生成的程序退出后才会退出。
或者只是说“睡一天”然后开心就好。
答案2
您是否尝试过使用?ForwardX11Trusted
来代替允许“受信任”连接的较新选项。这意味着您的本地 X 服务器将允许远程连接执行更多操作。ForwardX11
ForwardX11Trusted
本文更详细地讨论了发生了什么,以及如果你使用它,你可能会遇到什么困难ForwardX11
。
答案3
您还必须在服务器端启用 AllowX11Forwarding。对于 SSH1 来说,可能不需要/不使用此功能。
详细信息看这里