转发X连接时,OpenSSH客户端在注销时挂起

时间:2012-11-29 21:04:29

标签: linux ubuntu openssh

我设置Ubuntu Linux来运行OpenSSH服务器。我的DSL路由器是端口转发SSH连接。当我使用

ssh -X myhost

然后打开一些GUI程序,然后关闭GUI应用程序并退出,然后SSH注销挂起。 <Ctrl>-c似乎有效,但每次都必须按下它很烦人。如果我不打开GUI,注销将不会挂起。

任何人都有想法如何解决这个问题?

4 个答案:

答案 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。但是,如果您正在寻找替代解决方案,请尝试 exitMore can be found here!