我设置Ubuntu Linux来运行OpenSSH服务器。我的DSL路由器是端口转发SSH连接。当我使用
ssh -X myhost
然后打开一些GUI程序,然后关闭GUI应用程序并退出,然后SSH注销挂起。 <Ctrl>-c
似乎有效,但每次都必须按下它很烦人。如果我不打开GUI,注销将不会挂起。
任何人都有想法如何解决这个问题?
答案 0 :(得分:13)
这是因为您启动的进程打开了一个流(stdout / stderr)并且没有关闭它。请查看here以获得更深入的解释和可能的解决方案。
答案 1 :(得分:7)
我知道这是一个老问题,但我遇到了同样的问题,在做了一些挖掘后,我找到了一个有用的解决方案。现在我关闭与~.
“终止连接(和任何多路复用会话)”的SSH连接,这对我有用。转义字符需要在新行上键入,在我的情况下,转义字符不会显示在屏幕上(我最终转义转义字符,即~~
)。仅供参考,您可以使用~#
查看来自SSH会话的转发连接。
有关转义序列的完整列表,请在SSH会话中键入~?
。
支持的转义序列:
~.
- 终止连接(以及任何多路复用会话)~B
- 向远程系统发送BREAK ~C
- 打开命令行~R
- 请求重定密钥(仅限SSH协议2)~^Z
- 暂停ssh ~#
- 列出已转发的连接~&
- 后台ssh(等待连接终止时)~?
- 此消息~~
- 通过输入两次发送转义字符(请注意,转义仅在换行后立即识别。)
答案 2 :(得分:1)
启动远程GUI应用程序后,您可以自动将SSH发送到后台:
ssh -X -f remote.host.name 'name_of_gui_application'
这仍然会要求输入密码,然后运行应用程序并立即将SSH置于后台。
它还会从/dev/null
重定向STDIN,因此关闭应用程序后您的会话不会“挂起”(不是您知道的,因为它在后台运行)。
以下是SSH的手册页有关此内容的说法:
在远程站点启动X11程序的推荐方法是
ssh -f host xterm
。
答案 3 :(得分:0)
我知道这绝不是直接回答 OP。但是,如果您正在寻找替代解决方案,请尝试 exit
。 More can be found here!