如何保持动态转发的 SSH 会话处于活动状态并随意终止它?

如何保持动态转发的 SSH 会话处于活动状态并随意终止它?

我发现某人通过以下方式保持 SSH 会话处于活动状态

ssh -f -D $port $SSH_HOST "
    if [ -f ~/.tunnel ]; then
        rm ~/.tunnel;
    fi;
    while [ ! -f ~/.tunnel ]; do
        echo > /dev/null;
    done
" &

并通过以下方式终止 SSH 会话

ssh $SSH_HOST "touch ~/.tunnel" 
  1. 文件的使用方式和pid文件的使用方式一样吗?该方式可以用于更多或一般情况吗?

  2. 我们真的需要使用文件的方式来保持 SSH 会话的存活并终止它吗?有更好的方法吗?

谢谢。

答案1

简单的改进

该技术允许您终止来自远程计算机的连接。我建议进行一些更改

  • 在 while 循环中添加一个sleep,没有必要将 CPU 时间浪费在等待上
  • 颠倒过程。触摸开头的文件并将其删除以终止会话。如果需要,这确实为您提供了在文件中包含 PID 的选项。

你需要这个吗?

如果您只想终止会话,我会避免使用问题中的方法并使用:

SSH -N -D $port $SSH_HOST &

这将设置一个没有 shell 的连接作为后台任务(-N禁用 shell 并&使其成为后台任务)。

您可以使用以下命令获取(本地)PID,$!并使用以下命令杀死它kill

例如:

SSH -N -D $port $SSH_HOST &
TUNNEL_PID=$!

# Do some other stuff

kill $TUNNEL_PID

答案2

除了@PhilipCouling 所写的之外,还有一个奇怪但有效的小实用程序,旋转器,当交互式终端会话保持打开状态时很有用。您在远程主机上运行它。它没有做太多事情,只是每隔一段时间就会向本地客户端发送一个虚拟数据包秒(我用= 120,例如)。虚拟人保持连接处于活动状态。

不确定这是否是您想要的东西,但它就是这样。

相关内容