19

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

ssh -X myhost

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

任何人都知道如何解决这个问题?

4

4 回答 4

18

This is because the process you start opens a stream (stdout/stderr) and doesn't close it. Have a look here for a more in-depth explanation and possible solutions.

于 2012-11-29T21:07:20.797 回答
13

我知道这是一个老问题,但我遇到了同样的问题,经过一番挖掘后,我找到了一个有用的解决方案。现在我用~.“终止连接(和任何多路复用会话)”关闭 SSH 连接,这对我有用。转义字符需要在新行上键入,在我的情况下,转义字符不会显示在屏幕上(我最终转义了转义字符,即~~)。仅供参考,您可以使用 SSH 会话查看转发的连接~#

~?在 SSH 会话中输入完整的转义序列列表。

支持的转义序列:

  • ~. - 终止连接(和任何多路复用会话)
  • ~B - 向远程系统发送 BREAK
  • ~C - 打开命令行
  • ~R - 请求重新生成密钥(仅限 SSH 协议 2)
  • ~^Z- 暂停 ssh
  • ~# - 列出转发的连接
  • ~& - 后台 ssh(等待连接终止时)
  • ~? - 这条信息
  • ~~ - 通过键入两次发送转义字符

(请注意,转义仅在换行符后立即被识别。)

于 2014-04-30T20:40:23.070 回答
1

您可以在启动远程 GUI 应用程序后自动将 SSH 发送到后台:

ssh -X -f remote.host.name 'name_of_gui_application'

这仍然会要求输入密码,然后运行应用程序并立即将 SSH 置于后台。

它还将从 重定向 STDIN /dev/null,因此您的会话在关闭应用程序后不会“挂起”(不是您所知道的,因为它无论如何都在后台运行)。

以下是 SSH 的手册页对此的说明:

在远程站点启动 X11 程序的推荐方法是使用类似ssh -f host xterm.

于 2014-05-01T17:09:34.577 回答
0

我知道这绝不是直接回答 OP。但是,如果您正在寻找替代解决方案,请尝试exit. 更多可以在这里找到!

于 2021-03-22T13:49:48.733 回答