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