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

adm*_*les 12 linux ubuntu openssh

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

ssh -X myhost
Run Code Online (Sandbox Code Playgroud)

然后打开一些GUI程序,然后关闭GUI应用程序并退出,然后SSH注销挂起.<Ctrl>-c似乎工作,但每次都要按它是烦人的.如果我不打开GUI,注销将不会挂起.

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

Lar*_*off 13

这是因为您启动的进程打开了一个流(stdout/stderr)并且没有关闭它.看看这里有更深入的解释和可能的解决方案.

  • 很可能这本质上与您的链接中引用的机制相同,但是它可能不是 stdout/stderr,而是转发的 X 连接,因为 OP 使用的是`ssh -X`。如果该 ssh 隧道上仍然存在*任何类型*的开放连接,ssh 将保持打开状态。我在登录系统并启动某种类型的 Gnome/KDE 工具/应用程序时遇到了这种情况,该工具/应用程序会启动一些后端守护程序/服务,当应用程序本身运行时,它们不一定会消失...... (2认同)

小智 7

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

有关转义序列的完整列表,请~?在SSH会话中键入.

支持的转义序列:

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

(请注意,转义只能在换行后立即识别.)