我有以下问题:
我有一台可以通过 ssh 访问的远程机器,它可以通过 Web 界面提供一些数据。
我可以使用 OpenSSH LocalForwarding 打开隧道并启动远程服务器:
ssh [email protected] -L 127.0.0.1:3333:localhost:4000 ./start.sh
然后,在另一个终端(或从 GUI)上,我可以启动一个浏览器,例如:
firefox localhost:3333/whatever
并访问我的应用提供的内容。
使用后,我只需按 [CTRL-C] 即可start.sh
关闭服务器、连接和隧道。
到目前为止,一切都很好。
问题是:是否可以编写一个脚本来组合所有内容,以便在浏览器终止时关闭隧道?
更准确地说,我想要一个脚本:
- 打开隧道并启动远程服务器(如上)。
- 在正确的端口(可以随机生成)上自动打开浏览器(firefox 可以,但不是必须的)。
- 在浏览器运行时保持隧道畅通。
- 当浏览器终止时(我知道可能还有其他打开的窗口,但这超出了重点)它应该向
SIGHUP
服务器( )发送信号(start.sh
)。 - 当远程服务器终止时隧道应该关闭(这应该是上述设置的自动)
我想在严格需要的时间内保持隧道和服务器的正常运行,避免“忘记关闭”,因为如果我必须手动执行它可能会发生。
我怎样才能做到这一点?
看起来您已经概述了问题中的大部分步骤。这几乎是您所要求的:
如果远程
./start.sh
命令终止,ssh
则将退出。在这种情况下,此脚本不会处理退出 Firefox,但隧道将不再存在。事实证明,答案比预期的要复杂一些。
我最终为服务器编写了一个完整的初始化脚本:
然后我用以下脚本调用它:
如果@larsks 或其他任何人提出更好的答案,我会很乐意接受他们的答案,否则我会在几天后接受我自己的答案。
我赞成@larsks,因为它激发了这个想法。