如何设置一个后台ssh隧道可以自动退出终端/会话?

如何设置一个后台ssh隧道可以自动退出终端/会话?

我想要的是如下:

  1. 我可以在 Linux 机器上在后台设置 ssh 隧道(实际上,我想在我的 .bashrc 中设置它)
  2. 仅当 ssh 隧道进程处于活动状态时,我才可以随时以该计算机上的任何用户身份使用此隧道运行进程。
  3. 当我从终端/会话退出时,ssh 隧道也应该退出。

我知道我可以在 Linux 中建立后台 ssh 隧道,如下所示:

ssh -Nf -L 8000:1.2.3.4:8000 [email protected]

当我退出这个终端/会话时,这个 ssh 隧道仍然会在后台运行。

如何让它也自动退出?

对于我的情况,我几乎每次登录服务器时都需要设置一个 SSH 隧道(以便绕过愚蠢的公司防火墙)。另一方面,我更喜欢注销后什么都不留下。


请注意:
这个http://www.g-loaded.eu/2006/11/24/auto-looking-ssh-tunnels/不符合我的要求。因为它要求我在 ssh 隧道进程之后立即启动我的进程,并且如果我的第一个 ssh 隧道任务完成,我需要为第二个任务再次设置 ssh 隧道。另一方面,如果我设置了较长的睡眠时间,那么 ssh 隧道将不会随我的终端一起退出。

也许可以编辑 .bash_logout 吗?我希望有一个聪明的解决方案,以免涉及脚本。

答案1

当特定用户登录到计算机时, ~/.bashrc 文件会加载,由 bashrc 文件启动的任何进程都会将该用户的会话作为父进程。现在,除非用户会话终止,否则该进程将不会自动终止。

我认为在 bashrc 文件中使用隧道命令并不明智。相反,您可以在 bashrc 文件中创建隧道命令的别名。在特定终端中调用别名,当您关闭该终端时,隧道将停止,因为现在该隧道的父级将是该终端。

相关内容