Як я можу відкрити та закрити тунель SSH разом із Firefox?


2

У мене є проксі-сервер, до якого я підключаюсь так

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/provide-password-to-ssh-command-inside-bash-script-without-the-usage-of-public

Редагувати:

Запустіть скрипт у терміналі. Огляд. Закінчивши перегляд, поверніться до терміналу і натисніть Ctr-C(INT / SIGINT), щоб очистити процеси. Здавалося, це працює для мене.


Це виглядає перспективно - але з'єднання SSH не вмирає, коли я закриваю Firefox, просто залишається відкритим. Гадаю trap, не виходить вихід Firefox? Я раніше не чув про це, trapале я трохи прочитав і спробував додати ще більше сигналів, trap "kill ${PID[*]}" EXIT QUIT INT STOP TERM ERR SIGINT SIGTERMале все одно не потрапив.
Мендак

Зрозумів - мені потрібно було інакше виявити PID процесу SSH, PID [0], про який повідомлялося в сценарії, помилковий. Так я і зробив це: trap "ps aux | grep ssh | grep 2001 | awk '{print \$2}' | xargs kill" EXIT SIGINT SIGTERM Якщо ви модифікуєте свій пост, я можу позначити вашу як відповідь, дякую!
Мендак

@Shah Я радий, що ти це працює. Відповідь відредагував, але, здавалося, працював для мене з деякими незначними корективами.
jmunsch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.