我有一個代理伺服器,我像這樣連接
ssh -L 2001:localhost:8888 -N myserver.com -p 443
然後我打開火狐瀏覽器
firefox -p "SSHProxy"
(它啟動配置為使用連接埠 2001 的 Firefox)。我瀏覽了一下,然後關閉 Firefox,然後停止隧道。
我想做的是自動化它:打開隧道,然後打開 Firefox。當我關閉 Firefox 時,我也想關閉隧道。
這可以透過簡單的腳本實現嗎?
我努力了
ssh -L 2001:localhost:8888 -N myserver.com -p 443 && firefox -p "SSHProxy"
但只有 SSH 位元執行,Firefox 無法開啟。如果我顛倒順序,則 SSH 僅在關閉 Firefox 後開啟。
在下面的幫助下,我使用了這個簡化的腳本:
#!/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
建立一個 bash 腳本,使用陣列儲存 PID,然後捕獲並殺死它們怎麼樣:
#!/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),進程應該被清理。這似乎對我有用。