我有一个代理服务器,我像这样连接
ssh -L 2001:localhost:8888 -N myserver.com -p 443
然后我打开 Firefox
firefox -p "SSHProxy"
(它启动配置为使用端口 2001 的 Firefox。)我浏览了一下,然后关闭 Firefox,然后停止隧道。
我想做的是自动执行:打开隧道,然后打开 Firefox。当我关闭 Firefox 时,我也想关闭隧道。
在一个简单的脚本中可以实现这个吗?
我努力了
ssh -L 2001:localhost:8888 -N myserver.com -p 443 && firefox -p "SSHProxy"
但只有 SSH 位执行,Firefox 不会打开。如果我反转顺序,则只有在关闭 Firefox 后才会打开 SSH。
在下面的帮助下我使用了这个简化的脚本:
#!/bin/bash -e
#Start SSH
ssh -L 2001:localhost:8888 -Nf myserver.com -p 443 &
#Start Firefox
firefox -p "SSHProxy" &
#Kill the SSH port 2001 when Firefox stops
trap "ps aux | grep ssh | grep 2001 | awk '{print \$2}' | xargs kill" EXIT SIGINT SIGTERM
wait
答案1
那么创建一个使用数组来存储 PID 然后捕获并杀死它们的 bash 脚本怎么样:
#!/bin/bash -e
ssh -L 2001:localhost:8888 -N myserver.com -p 443 &
PID[0]=$!
firefox -p "SSHProxy" &
PID[1]=$!
trap "kill ${PID[*]}" INT SIGINT
wait
如果您需要使用密码,请在此处查找sshpass
:https://stackoverflow.com/questions/16937104/provide-password-to-ssh-command-inside-bash-script-without-the-usage-of-public
编辑:
在终端中运行脚本。浏览。浏览完成后,返回终端并按Ctr-C
(INT/SIGINT),进程应该会被清理。这对我来说似乎有效。