TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #420 12.2K
Хелоу ворлд, вчера наш с вами товарищ Tagd Tagd попросил опубликовать статью, которую любезно написал для нас с вами. Спасибо дружище! Исполняю, вникайте, пишите комменты.

Я стилистику сохранил, но сверстал и поправил то, что ворд подчеркнул красным, чтобы читалось полегче. Эхх.. как же руки чесались добавить пару забористых фраз, ну да ладно, пусть будет как будет.

👇👇👇

redirall.sh


Да, я знаю про алиасы и ssh_config. Скрипт предназначен для ИНТЕРАКТИВНОГО проброса TCP-портов через jump-серверы, средствами ssh.

Позволяет пробрасывать порт с удаленной машины на 127.0.0.1 и коннектиться к службам компов, доступных из подсети jump-сервера (в скрипте gate сервер) за firewall.

При небольшой модификации можно открывать порт для компов своей локальной подсети. Удобен для сопровождения небольших фирм.

Кому это не интересно, рассматривайте скрипт, как учебный, потому как
тут есть некоторые фишки, которые поясню ниже.

В инете есть машина IP=1xx.2xx.2xx.54, у которой на порту 13527 висит ssh.

После подключения у нас на машине по адресу 127.0.0.1:8080 будет висеть служба 192.168.1.10:443 из локальной сети шлюзовой машины.

Кстати, dest_ip, dest_port, lo_port - значения по-умолчанию. При подключении их можно менять, не трогая конфиг.

Если кто заинтересовался пробросом портов через ssh рекомендую смотреть ключи -L -R -D.

✔️ Теперь к скрипту.

MULTICOLUMN=0 - список подключений в один столбец. Подходит, когда список до 20-30 строк.

MULTICOLUMN=1
список в несколько столбцов. Некрасиво, но много...

function ini() - список параметров, для тех, кто хранит данные в скрипте (можно еще heredoc).

Для тех, кто обожает конфиги - просто вставьте cat file.conf внутрь функции ini.


awk !/^#/ && NF - выводит строки, НЕ начинающиеся с #, и с числом полей >0. (не пустые, без комментов)

|eval $CMD - ПОЗВОЛЯЕТ МЕНЯТЬ ЛОГИКУ цепочки PIPE

|cat - заглушка (nop в мире pipe)

Дальше все просто.

read -i позволяет указать значение по-умолчанию, которое, можно изменить.

Скрипт можно приспособить для любого интерактива: выбор версии скачиваемой программы, монтирование/размонтирование FS, выполнение нужных, но редких скриптов, которые, блин, постоянно забываешь...

Советы приветствуются. Конфиг можно загружать и из сети, но перед объявлением ini.


#!/bin/bash

declare -i MULTICOLUMN=0
function ini(){ echo '

#name ssh_gate_ip gate_port ssh_user dest_ip dest_port lo_port

Filial1 1xx.2xx.2xx.54 13527 u232sr 192.168.1.10 80 8080
Filial2 9y.1yy.1yy.66 13531 u232sr 192.168.1.18 5432 5432
Firma2 1zz.2zz.2zz.53 22 p183975 192.168.1.100 3389 3388

'
}
declare -i COLS=$(echo "cols"|tput -S)
declare -i NUM=0
clear
[[ $MULTICOLUMN -eq 0 ]] && CMD='cat' || CMD='column -x -c$COLS'
#autonum & print list
ini |awk '!/^#/ && NF {print ++i, $1 }' |eval $CMD
#protection
declare -i MAX=$(ini |awk '!/^#/ && NF {++i}END{print i}')
while [[ $NUM -le 0 ]] || [[ $NUM -gt $MAX ]];do
read -p "select connection number = " NUM
done
#get default param for selected num
read -r NAME GATE_IP GATE_PORT USR DEST_IP DEST_PORT LO_PORT <<< \
$(ini | awk -v n="$NUM" '!/^#/ && NF {if(++i==n){print $0;exit}}') #'
clear
echo -e \\n"Connect to $NAME $GATE_IP"\\n
#modify param
read -e -p "DESTINATION_IP " -i "$DEST_IP" DEST_IP;echo
read -e -p "DESTINATION_PORT " -i "$DEST_PORT" DEST_PORT;echo
read -e -p "LOCAL PORT >1024 " -i "$LO_PORT" LO_PORT
#prompt
echo -e "127.0.0.1:$LO_PORT ~> $NAME" "$DEST_IP:$DEST_PORT"\\n\\n
#connect
ssh -L ${LO_PORT}:${DEST_IP}:${DEST_PORT} -p ${GATE_PORT} ${USR}@${GATE_IP}


tags: #bash
—
🔔 @bashdays
More from @bashdays
  1. Sep 30, 2026↗️ Для всех, кто строит 15 октября Cloud․ru соберет инженеров, которые строят и эксплуатир…
  2. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →