#!/bin/sh

LOCAL_PORT=443
LOCAL_ADDRESS=localhost
REMOTE_ALLOWED_ADDRESS=*
REMOTE_PORT=''
SERVER=''
SERVER_PORT=22
MAXLIFETIME=0
PIDFILE=''
KEYFILE=''

usage () {
echo -e "usage: create_ssh_tunnel\t[--local_port port (default:443)] [--remote_port port on server] [--local_address addr (default:localhost)]"
echo -e "\t\t\t\t[--remote_allowed_addr addr (default:*)] [--server server] [--server_port port] [--lifetime sec] [--user user on server] [--passwd password for user] [--pidfile file]"
echo -e "\t\t\t\t[--keyfile key file]"
echo -e "\t\t\t\tfor username and password use: export USER='user'; export PASS='password'"
}

while [ "$1" != "" ]; do
    case $1 in
        --local_port )          shift
                                LOCAL_PORT=$1
                                ;;
        --local_address )       shift
                                LOCAL_ADDRESS=$1
                                ;;
        --remote_port )         shift
                                REMOTE_PORT=$1
                                ;;
        --remote_allowed_addr ) shift
                                REMOTE_ALLOWED_ADDRESS=$1
                                ;;
        --server ) 				shift
                                SERVER=$1
                                ;;
        --server_port )			shift
                                SERVER_PORT=$1
                                ;;
        --lifetime )			shift
                                MAXLIFETIME=$1
                                ;;
        --user )				shift
                                USER=$1
                                ;;
        --passwd )				shift
                                PASS=$1
                                ;;
        --pidfile )				shift
                                PIDFILE=$1
                                ;;
        --keyfile )				shift
                                KEYFILE=$1
                                ;;
        --help )           		usage
                                exit
                                ;;
        * )                     usage
                                exit 1
    esac
    shift
done

if [ -z "$REMOTE_PORT" ] || [ -z "$SERVER" ] || [ -z "$USER" ]; then
	usage
	exit 1
fi

KEY_PART=""
if [ ! -z "$KEYFILE" ]; then
	KEY_PART=" -i ${KEYFILE}"
fi

PASS_PART=""
if [ ! -z "$PASS" ]; then
	PASS_PART=" sshpass -p ${PASS}"
fi

export AUTOSSH_MAXLIFETIME=$MAXLIFETIME; export AUTOSSH_PIDFILE=$PIDFILE; $PASS_PART autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" $KEY_PART -p $SERVER_PORT -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -N -T -R $REMOTE_ALLOWED_ADDRESS:$REMOTE_PORT:$LOCAL_ADDRESS:$LOCAL_PORT $USER@$SERVER
