![BASH 脚本终止时 SSH 会话关闭(非常非标准的情况)](https://linux22.com/image/738925/BASH%20%E8%84%9A%E6%9C%AC%E7%BB%88%E6%AD%A2%E6%97%B6%20SSH%20%E4%BC%9A%E8%AF%9D%E5%85%B3%E9%97%AD%EF%BC%88%E9%9D%9E%E5%B8%B8%E9%9D%9E%E6%A0%87%E5%87%86%E7%9A%84%E6%83%85%E5%86%B5%EF%BC%89.png)
我从 BASH 脚本启动 ssh 会话。因此,根本不需要控制台。(这是反向 SSH 所必需的)。
我需要 SSH 会话:
- 脚本完成后保持活动;
- 从另一个脚本终止它(当然是在某些条件下);
正在考虑虚拟终端会话(可能使用 cat...),但不知道如何操作,或者可能有另一种“正确”的方法来做到这一点。
TNX(提前)!
答案1
我假设您正在尝试维护 SSH 隧道。有很多方法可以做到这一点,但我不知道是否有“正确”的方法,因为这在很大程度上取决于您实际要实现的目标。
一种方法(较简单的方法之一)是在屏幕中启动 SSH 会话,为其指定一个唯一名称,然后使用屏幕的命令终止它。以下是执行此操作的示例脚本:
#!/bin/bash
SCREENNAME="the_great_ssh_tunnel"
SSHCOMMAND="ssh -N -R ...."
case "$1" in
start)
if screen -ls|grep -q "$SCREENNAME"; then
echo "Already running."
else
screen -m -d -S "$SCREENNAME" $SSHCOMMAND
echo "Started."
fi
;;
stop)
if screen -ls|grep -q "$SCREENNAME"; then
echo "Stopping"
screen -S "$SCREENNAME" -X kill
else
echo "Not running"
fi
;;
isrunning)
if screen -ls|grep -q "$SCREENNAME"; then
echo "Running."
else
echo "Not running."
fi
;;
esac
如果您具有 root 访问权限,您可能希望将其转换为 systemd 单元。