我在工作时在开发盒上运行一个屏幕会话,然后在工作时通过 ssh 进入我的开发盒并恢复我的屏幕会话。从那里,我跳到其他机器。
有时,我发现自己从我已经通过 ssh 远程屏幕会话 ssh 到远程主机那我通过 ssh 连接到的远程主机不允许我完全断开连接。因此,我最终需要强制我的远程(第二个)ssh 会话终止,而不影响连接到屏幕的原始 ssh 会话。我知道杀死 ssh 是通过 a 完成的enter
~.
,但就像我说的,我的本地 ssh 客户端拦截了该组合键,除了我需要将 ssh 重新连接到我的开发盒之外什么也没完成。
有人遇到过这个吗?如何在屏幕中终止远程 ssh 会话而不终止原始 ssh 会话?我在屏幕上找不到任何合适的东西来做到这一点。这也适用于额外的跃点 IE ssh -> screen -> ssh -> ssh(无法干净地注销)<-想要强制终止此 ssh 会话。
我尝试运行enter
~~.
,这会终止第二个 ssh 会话,这样的方法有效。不过,对于第三次、第四次或更多次跳跃来说,这还不够好。
如果有一个解决方案能够工作,无论我通过 ssh 连接到其他机器的深度如何,那就太好了。
答案1
要终止第 n 个 SSH 会话,请键入<enter>
,然后键入 2^(n-1) ~
,然后键入.
。 (~~
发送转义字符;因此,两个波形符将导致第一个 SSH 将其发送到第二个 SSH,然后第二个 SSH 将拾取点并消失。根据需要进行推断以实现更深层次的嵌套。)
我也有类似的情况;我的解决方案是在开发盒上安装 Mosh,它不会获取 SSH 的转义序列(但有自己的转义序列)。这从整个事情中剥离了一层,这使得事情变得更容易。