diff options
| author | hc <hc@email.ch> | 2024-12-16 14:37:48 +0800 |
|---|---|---|
| committer | hc <hc@email.ch> | 2024-12-16 14:37:48 +0800 |
| commit | 47303626554d42356dfd1b61ad3f9de97929cc87 (patch) | |
| tree | eeb959ddac157e96096c54fb46af136055c1e198 | |
| parent | 71c7d66a5fcc1dc44665741dd264ba2c6a5524c5 (diff) | |
multiportforward
| -rw-r--r-- | port-forward/ssh-multiport-forward.sh | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/port-forward/ssh-multiport-forward.sh b/port-forward/ssh-multiport-forward.sh new file mode 100644 index 0000000..40d4ef6 --- /dev/null +++ b/port-forward/ssh-multiport-forward.sh | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | # Check if at least one argument is provided | ||
| 3 | if [ $# -lt 1 ]; then | ||
| 4 | echo "Usage: $0 <base_number> [additional_ports...]" | ||
| 5 | echo "Example: $0 5 80 443" | ||
| 6 | exit 1 | ||
| 7 | fi | ||
| 8 | |||
| 9 | # First argument is the base number for port range | ||
| 10 | j=$1 | ||
| 11 | shift # Remove first argument from the list, leaving only additional ports | ||
| 12 | |||
| 13 | HOST="root@p.0nom.ch" | ||
| 14 | |||
| 15 | # Clean management port | ||
| 16 | echo "cleaning management port..." | ||
| 17 | ssh $HOST "ss -tunlp | grep :${j}022 | awk '{print $NF}' | sed 's/.*pid=\([^,]*\).*/\1/' | head -n1 | xargs kill -9" | ||
| 18 | echo "cleaning attempted." | ||
| 19 | |||
| 20 | # Build the SSH command with all port forwards | ||
| 21 | SSH_CMD="ssh $HOST" | ||
| 22 | |||
| 23 | # Add range-based port forwards (j000-j005) | ||
| 24 | for i in $(seq ${j}000 ${j}005); do | ||
| 25 | SSH_CMD+=" -R $i:localhost:$i" | ||
| 26 | done | ||
| 27 | |||
| 28 | # Add management port forward | ||
| 29 | SSH_CMD+=" -R ${j}022:localhost:22" | ||
| 30 | |||
| 31 | # Add additional individual port forwards from remaining arguments | ||
| 32 | for port in "$@"; do | ||
| 33 | SSH_CMD+=" -R $port:localhost:$port" | ||
| 34 | done | ||
| 35 | |||
| 36 | # Execute the SSH command | ||
| 37 | eval $SSH_CMD | ||
| 38 | |||
| 39 | echo "Port forwards are available on:" | ||
| 40 | echo "- Ports ${j}000-${j}005" | ||
| 41 | echo "- Management port ${j}022" | ||
| 42 | if [ $# -gt 0 ]; then | ||
| 43 | echo "- Additional ports: $@" | ||
| 44 | fi | ||
