#!/bin/bash error() { >&2 printf '\033[1;31mERROR:\033[0m \033[1m%s\033[0m\n' "$error" return "$1" } error_null_arg() { local error error="Variable \"${1}\" can't be null" error 1 } parse_variable() { ! : } # Parser les variables trap error_null_arg EXIT set -e ssh_host="$1" shift parse_variable ssh_host "$1" 'SSH host' parse_variable local_port 'local port' parse_variable distant_port 'distant port' trap - EXIT set +e # Lancer la redirection SSH start_forwarding() { ssh \ -f -N \ -L "${local_port}:${target}:${distant_port}" \ "$@" \ "$ssh_host" } # Supprimer la redirection SSH stop_forwarding() { start_forwarding -O cancel } # Retourner 0 si le port de la redirection est déjà utilisé par SSH is_forwarding_active() { lsof -i -P -n \ | awk '($1 == "ssh" && $10 == "(LISTEN)") { print $9 }' \ | cut -d : -f 2 \ | grep -q "$local_port" } # Branchement principal if ! is_forwarding_active; then start_forwarding else stop_forwarding fi