У меня есть прокси-сервер, к которому я подключаюсь вот так
ssh -L 2001:localhost:8888 -N myserver.com -p 443
Затем я открываю Firefox.
firefox -p "SSHProxy"
(Запускается Firefox, настроенный на использование порта 2001). Я немного побродил по интернету, затем закрыл 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/предоставьте-пароль-к-команде-ssh-inside-bash-script-without-the-usage-of-public
РЕДАКТИРОВАТЬ:
Запустите скрипт в терминале. Просмотрите. После просмотра вернитесь в терминал и нажмите Ctr-C
(INT/SIGINT), процессы должны быть очищены. Мне показалось, что это сработало.