有没有办法在不阻止本地 TTY 会话的情况下建立机会共享的 SSH 连接?

有没有办法在不阻止本地 TTY 会话的情况下建立机会共享的 SSH 连接?

在我的 中~/.ssh/config,我ControlMaster auto启用了该设置。它对我来说效果很好,但有一种行为让我恼火,我想消除它。

假设我有两个终端仿真器窗口 A 和 B。在窗口 A 中,我调用ssh连接到远程主机,然后在窗口 B 中执行相同操作。接下来,我exit在窗口 A 中键入以关闭会话。尽管我已经断开连接,但ssh窗口 A 中的进程不会退出到本地会话,因为它必须等待窗口 B 中的进程也结束其远程会话:它必须保持控制套接字运行。

我宁愿这样,当我在窗口 A 中断开连接时,我会立即返回到我调用的原始本地会话ssh,而窗口 B 中的会话继续运行。您可能会问:那么,哪个进程应该管理控制套接字呢?理想情况下,我希望它成为在用户 systemd 实例的监督下运行的专用第三进程,当没有更多会话运行时,它会自动断开连接。但我也接受一种更老套的方法,带有挥之不去的后台进程。

我宁愿避免手动启动控制套接字主机。当我打开第一个会话时,它应该会自动启动。

这可以吗?

答案1

诸如以下的命令

ssh -f -N remote_host

将创建ssh到远程主机的会话,但不运行命令 ( -N) 和后台本身 ( -f)。该命令可以作为主控使用。

如果你想通过隧道传输 X 这样的东西,那么也可以通过这个命令来完成

ssh -X -f -N remote_host

如果您发现空闲会话断开连接(例如由于 NAT 超时),则添加类似内容

-o ServerAliveInterval=30 

(或config文件中的同等内容)将尝试保持会话处于活动状态。

相关内容