Skip to content
Snippets Groups Projects
Commit afc1732f authored by Michael Blaschek's avatar Michael Blaschek :bicyclist:
Browse files

bug fix port forward

parent 1ea1e061
No related branches found
No related tags found
No related merge requests found
#!/bin/bash
# By Michael Blaschek
# Date 18.01.2021
# CC BY 4.0 International
# CC BY 4.0 International
# University of Vienna, Austria
# Description:
# Connect to Jet via a gateway server
help(){
cat << EOF
$0 -g [gateway] -p [port] user@remote
help() {
cat <<EOF
$0 -g [gateway] -p [port] -r [remote-port] user@remote
Options:
-g [gateway] gateway server, e.g. user@login.univie.ac.at
-p [port] port to forward from jet to local, egv VNC port
-g [gateway] gateway server, e.g. user@login.univie.ac.at
-p [port] port to forward from jet to local, egv VNC port
-r [port] remote port if not the same as port
Example:
$0 -g [U:Account-Username]@login.univie.ac.at [Jet-Username]@jet01.img.univie.ac.at
......@@ -20,15 +21,18 @@ Example:
EOF
}
while getopts "g:p:h" flag;
do
case "${flag}" in
g ) gateway=${OPTARG}; ;;
p ) port=${OPTARG}; ;;
h|* ) help; exit 0;;
esac
while getopts "g:p:r:h" flag; do
case "${flag}" in
g) gateway=${OPTARG} ;;
p) port=${OPTARG} ;;
r) rport=${OPTARG} ;;
h | *)
help
exit 0
;;
esac
done
shift $((OPTIND-1))
shift $((OPTIND - 1))
command=""
remote=$1
script=$(basename $0)
......@@ -40,25 +44,56 @@ if [ "${remote}" == "" ]; then
fi
if [ -n "${port}" ]; then
echo "Forwarding Port: $port"
command="-L ${port}:localhost:${port} "
# -L local_port:destination_server_ip:remote_port
if [ -n "${rport}" ]; then
echo "Forwarding Port: $rport to $port"
command="-L ${port}:localhost:${rport} "
else
echo "Forwarding Port: $port to $port"
command="-L ${port}:localhost:${port} "
rport=$port # make sure we use this
fi
fi
# Check if names are in .ssh/config
remote_status=false
gateway_status=false
if [ -e $HOME/.ssh/config ]; then
# check if hosts are there
cat $HOME/.ssh/config | grep -i 'Host ${remote}' > /dev/null
if [ $? -eq 0 ]; then
remote_status=true
fi
if [ -n ${gateway} ]; then
cat $HOME/.ssh/config | grep -i 'Host ${gateway}' > /dev/null
if [ $? -eq 0 ]; then
gateway_status=true
fi
fi
fi
if [ -n "${gateway}" ]; then
echo "$gateway" | grep '@' > /dev/null
if [ $? -eq 1 ]; then
echo "Please give: [user]@[server], not $gateway"
exit 1
echo "$gateway" | grep '@' >/dev/null
if [ $? -eq 1 ] && [ ! $gateway_status ]; then
echo "Could fail if not: [user]@[server], trying: $gateway"
fi
if [ -n "${port}" ]; then
echo "Using gateway: $gateway to $remote "
echo "Port Forwarding via the gateway: "
ssh -L ${port}:localhost:${port} -t $gateway ssh -L ${port}:${gateway}:${rport} ${remote}
echo "$(date) | ssh -L $port:localhost:12345 -t $gateway 'ssh -L 12345:${gateway}:${rport} ${remote}'" >>.${script/.sh/.log}
else
echo "Using gateway: $gateway to $remote "
ssh $command -t $gateway 'ssh ${command} ${remote}'
echo "$(date) | ssh $command -t $gateway 'ssh ${command} ${remote}'" >> .${script/.sh/.log}
ssh $command -t $gateway ssh ${command} ${remote}
echo "$(date) | ssh $command -t $gateway 'ssh ${command} ${remote}'" >>.${script/.sh/.log}
fi
else
if [ ! $remote_status ] ; then
echo "Could fail if not: [user]@[server]"
fi
echo "Direct connection to: ${remote}"
ssh ${command} ${remote}
echo "$(date) | ssh ${command} ${remote}" >> .${script/.sh/.log}
echo "$(date) | ssh ${command} ${remote}" >>.${script/.sh/.log}
fi
echo "Command Log in .${script/.sh/.log}"
echo "Command Log in .${script/.sh/.log}"
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment