60 lines
1.2 KiB
Bash
Executable file
60 lines
1.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
readonly PROGRAM_NAME=$(basename $0)
|
|
readonly PROGRAM_LOC=$(readlink -m $(dirname $0))
|
|
readonly ARGS="$@"
|
|
|
|
usage() {
|
|
echo usage: $PROGRAM_NAME LOCAL_PORT REMOTE_PORT REMOTE_HOST
|
|
exit 1
|
|
}
|
|
|
|
create_tunnel() {
|
|
local readonly local_port=$1; shift
|
|
local readonly remote_port=$1; shift
|
|
local readonly remote_host=$1; shift
|
|
|
|
ssh -f -N $remote_host -R $remote_port":localhost:"$local_port
|
|
}
|
|
|
|
tunnel_not_present() {
|
|
local readonly remote_port=$1; shift
|
|
|
|
ps ax \
|
|
| grep ssh \
|
|
| grep $remote_port \
|
|
| grep -v grep >> /dev/null
|
|
|
|
[[ $? -ne 0 ]]
|
|
}
|
|
|
|
maintain_tunnel() {
|
|
local readonly local_port=$1; shift
|
|
local readonly remote_port=$1; shift
|
|
local readonly remote_host=$1; shift
|
|
|
|
if tunnel_not_present $remote_port; then
|
|
create_tunnel $local_port $remote_port $remote_host
|
|
fi
|
|
}
|
|
|
|
is_empty() {
|
|
local readonly string=$1; shift
|
|
|
|
[[ -z "$string" ]]
|
|
}
|
|
|
|
main() {
|
|
local readonly local_port=$1; shift
|
|
local readonly remote_port=$1; shift
|
|
local readonly remote_host=$1; shift
|
|
|
|
if is_empty $local_port || is_empty $remote_port || is_empty $remote_host
|
|
then
|
|
usage
|
|
fi
|
|
|
|
maintain_tunnel $local_port $remote_port $remote_host
|
|
}
|
|
|
|
main
|