我发现某人通过以下方式保持 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"
文件的使用方式和pid文件的使用方式一样吗?该方式可以用于更多或一般情况吗?
我们真的需要使用文件的方式来保持 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,例如)。虚拟人保持连接处于活动状态。
不确定这是否是您想要的东西,但它就是这样。