59 lines
1 KiB
Bash
Executable file
59 lines
1 KiB
Bash
Executable file
#!/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
|