Настройка и автматизация запуска SSH тунеля

На машине которая будет инициировать соединение тунеля создал dddd.sh файлик где "dddd" это название
#!/bin/bash
sleep 5 -- установил задержку запуска в 5 секунд
ssh -N -R xxxx:localhost:yyyy [email protected] -p zzzz -- где:
___xxxx это порт на котором будет установлено обратное соединение, как следствие должен быть открыт на маршрутере
___yyyy это порт с которого будет проходить сединение у меня и по дефолту это 22 порт
___user это имя пользователя куда строить тунель
___n.n.n.n это IP адрес куда строить тунель (у меня это мой статический ИП)
___zzzz это порт на которое будет устанавливаться соединение SSH

Теперь создать .sh на ответном устройстве для подключения в тунель
#!/bin/bash
ssh user@localhost -p xxxx
-- где:
___user это имя пользователя с которого инициируется тунель
___xxxx это порт на котором висит обратное соединение (то есть такой же как на предидущем устройстве)




Для автоматического запуска создал файлик nnnn.service по адресу ~/.config/systemd/user/ где nnnn это имя файла с таким содержимым
[Unit]
Description=nnnn
After=network

[Service]
ExecStart=/home/user/dddd.sh
Restart=oneshot

[Install]
WantedBy=default.target
-- где:
nnnn это название сервиса у меня совпадает с название файла для удобства
/home/user/dddd.sh это путь к исполняемому скрипту


Дабы запустить сие безобразие потребовалось:
systemctl --user daemon-reload -- перезагрузить демон
systemctl --user enable nnnn.service -- включить автозапуск
systemctl --user start nnnn.service -- запустить сервис
systemctl --user status nnnn.service -- проверить или все нормально запустилось



Тунель для проходу наприклад на веб сторінку через ссш тунель


ssh -L 8080:192.168.n.n:80 [email protected] -p 3224 --> команда має такий вигляд, пояснення нижче
ssh -L ПОРТ_З_ЯКОГО_ПЕРЕХОПИТИ:ІП_АДРЕСА_ПРИЗНАЧЕННЯ:ПОРТ_НА_ЯКИЙ_ВІДПРАВИТИ_ПЕРЕХОПЛЕНИЙ_ТРАФІК ЮЗЕРНЕЙМ@ІП_ЧЕРЕЗ_КОГО_ССШ -p ПОРТ_ССШ_ЯКЩО_НЕ_СТАНДАРТНИЙ
логіка така: перехопити трафік, що іде з порта 8080, та відправити його на 192.168.n.n:80 через ссш такого-то користувача и ип з портом(якщо не стандартний), тобто тепер якщо відкрити браузер, та написати в адресі localhost:8080 то відкриється сторінка 192.168.n.n вже на 80 порту
PS: якщо закрити тунель, то підключення до сторінки перерветься також



Подвійний тунель, через jump


ssh -L 5876:192.168.n.n:3388 -J [email protected] nyzna@localhost -p 2333 --> пояснення нижче
ssh -L ПОРТ_З_ЯКОГО_ПЕРЕХОПИТИ_ТРАФІК:ІП_АДРЕСА_ПРИЗНАЧЕННЯ:ПОРТ_НА_ЯКИЙ_ВІДПРАВИТИ_ПЕРЕХОПЛЕНИЙ_ТРАФІК -J ЮЗЕРНЕЙМ_ПРОКЛАДКИ@ІП_АДРЕСА_ПРОКЛАДКИ ЮЗЕРНЕЙМ_ХТО ВІДПРАВИТЬ_ТРАФІК_НА_ПРИЗНАЧЕННЯ@ІП_АДРЕСА -p ПОРТ_ССШ_ЯКЩО_НЕ_СТАНДАРТНИЙ
логіка роботи така: перехопити трафік, який іде з порта 5876, відправити його на іп 192.168.n.n на порт 3388 через [email protected] і через nyzna@localhost в якого порт ссш 2333 (від і відправить трафік на іп призначення)
PS: якщо в команду після іп призначення та порту додати індекс -N то після вводу паролів не можна буде нічого робити, тобто це заборона вводу команд в ссш