commit 58c51672ca16982bb669cc49c5a569f5c35c8f15 Author: Artur Mukhamadiev Date: Fri Jun 27 22:38:17 2025 +0300 [init] tunnel script :Release Notes: usage: tun.sh args: -p|--port - specify one port to which we should listen and forward (will be added to the .tunLast file for future use) -k|--kill - to kill all opened ports -d|--debug - output result opened ports (ssh grep) :Detailed Notes: - :Testing Performed: - :QA Notes: - :Issues Addressed: - diff --git a/.tunLast b/.tunLast new file mode 100644 index 0000000..c7dc989 --- /dev/null +++ b/.tunLast @@ -0,0 +1 @@ +2222 diff --git a/tun.sh b/tun.sh new file mode 100755 index 0000000..9567cf5 --- /dev/null +++ b/tun.sh @@ -0,0 +1,97 @@ +#!/bin/bash +scriptName=$(basename $0) +version=0.1 +idx=0 +killFlag=0 +endpoint="192.168.105.100" +user="vptyp" +cacheFile=.tunLast +privateKeyLoc="~/.ssh/id_ecdsa" +override=0 +debug=0 + + +fromPort=0 +toPort=0 +function killTunnel { + if [[ debug -eq 1 ]]; then + printf "killTunnel %d\n" $toPort + fi + pkill -f "ssh -i ${privateKeyLoc} -fNL 0.0.0.0:$toPort:" + iptables -D INPUT -p tcp --dport $toPort -j ACCEPT 2>/dev/null +} + +function openTunnel { + ssh -i ${privateKeyLoc} -fNL 0.0.0.0:$toPort:${endpoint}:$fromPort ${user}@localhost + iptables -A INPUT -p tcp --dport $toPort -j ACCEPT 2>/dev/null +} + +function parsePort { + local delimiter=":" + str=$1 + fromPort=${str%%${delimiter}*} + toPort=${str#*${delimiter}} + if [[ ${#toPort} -eq 0 ]]; then + toPort=$fromPort + fi +} + +function usage { + echo " + Usage: $scriptName [OPTIONS] + Options: + -k | --kill Try to kill defined tunnels, if missing will try to create them + -p | --port FROM:TO Define new port forwarding rule, if in format FROM:TO - will create + tunnel from port FROM on defined endpoint to port TO on local + " +} + +while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in + -V | --version ) + echo "$version" + exit + ;; + -k | --kill ) + killFlag=1 + ;; + -p | --port ) + shift; + port[$idx]=$1 + idx=$(($idx+1)) + override=1 + ;; + -d | --debug ) + debug=1 + ;; + -h | --help ) + usage + exit + ;; +esac; shift; done +if [[ "$1" == '--' ]]; then shift; fi + +if [[ ${#port[@]} -gt 0 ]]; then + printf "PORT TO OPEN: %s\n" ${port[@]} +fi + +if [[ ${override} -eq 0 && -r ${cacheFile} ]]; then + while IFS= read -r line; do + port[$idx]=$line + idx=$(($idx+1)) + done < ${cacheFile} +fi + +for i in "${port[@]}"; do + parsePort $i + if [[ ${killFlag} -eq 1 ]]; then + killTunnel + else + openTunnel + fi +done + +printf "%s\\n" "${port[@]}" > ${cacheFile} + +if [[ ${debug} -eq 1 ]]; then + netstat -lnptu | grep ssh +fi