Browse Source

Allow proxycommand in config

master
srvrco 9 years ago
parent
commit
19d9cd823d
1 changed files with 46 additions and 45 deletions
  1. +46
    -45
      rssh

+ 46
- 45
rssh View File

@ -20,14 +20,14 @@
# 2016-06-29 Updated to allow user/ port on command line plus run commands (v0.5)
# 2016-06-20 Tidy code, and check with shellcheck (v0.6)
# 2017-01-09 Tidy code, and check with latest shellcheck (v.07)
# 2017-04-26 Allow proxycommand in config (0.8)
# ---------------------------------------------------------------------------
PROGNAME=${0##*/}
VERSION="0.7"
VERSION="0.8"
# define variables
hops=0
default_hops=0
declare -a host
declare -a hostdata
declare -a hostname
@ -36,6 +36,7 @@ declare -a user
declare -a options
conffile=$(mktemp)
ignore_default_route=0
ignore_proxies=0
host_list=""
use_ssh=0
_USE_DEBUG=0
@ -68,44 +69,21 @@ add_hop() {
l_port=$(echo "$l_host" | awk -F: '{print $2}')
l_host=$(echo "$l_host" | awk -F: '{print $1}')
fi
host[${hops}]=$l_host;
hostdata[${hops}]=$(sed -n "/Host.* ${l_host}\( \|$\)/,/^[ ]*$/p" ~/.ssh/config);
# ignore dulicate hop of DEFAULT_SSH_ROUTE when connecting with "rssh $DEFAULT_SSH_ROUTE"
if [[ "$l_host" == "$DEFAULT_SSH_ROUTE" ]] && [[ $hops -eq $((default_hops+1)) ]]; then
((hops--))
debug "ignoring hop $l_host as it is the default route anyway"
else
# ignore default routing if there is first hop has a comment "Ignore_DEFAULT_SSH_ROUTE" in the .ssh/config
if [[ "$(echo "${hostdata[${hops}]}" | grep -o "Ignore_DEFAULT_SSH_ROUTE")" == "Ignore_DEFAULT_SSH_ROUTE" ]]; then
if [ ${hops} -eq $((default_hops+1)) ]; then
debug "ignore default route through $DEFAULT_SSH_ROUTE as config files states Ignore_DEFAULT_SSH_ROUTE"
for (( i=1; i<=$((hops-1)); i++ )); do
host[${i}]=""
hostname[${i}]=""
hostdata[${i}]=""
port[${i}]=""
user[${i}]=""
done
hops=1
host[${hops}]=$l_host
hostdata[${hops}]=$(sed -n "/Host.* ${l_host}\( \|$\)/,/^[ ]*$/p" ~/.ssh/config);
fi
fi
hostname[${hops}]=$(echo "${hostdata[${hops}]}" | grep -i "Hostname" | awk '{print $2}' )
hostname[${hops}]=${hostname[${hops}]:=${l_host}}
f_port=$(echo "${hostdata[${hops}]}" | grep -i "^[ ]*port" | awk '{print $2}' )
port[${hops}]=${l_port:=$f_port}
port[${hops}]=${port[${hops}]:=22}
user[${hops}]=$l_user
options[${hops}]=$(echo "${hostdata[${hops}]}" | \
grep -iv "^[ ]*host" | \
grep -iv "^[ ]*port" | \
hostdata[${hops}]=$(sed -n "/[Hh]ost.* ${l_host}\( \|$\)/,/^[ ]*$/p" ~/.ssh/config);
hostname[${hops}]=$(echo "${hostdata[${hops}]}" | grep -i "Hostname" | awk '{print $2}' )
hostname[${hops}]=${hostname[${hops}]:=${l_host}}
f_port=$(echo "${hostdata[${hops}]}" | grep -i "^[ ]*port" | awk '{print $2}' )
port[${hops}]=${l_port:=$f_port}
port[${hops}]=${port[${hops}]:=22}
user[${hops}]=$l_user
options[${hops}]=$(echo "${hostdata[${hops}]}" | \
grep -iv "^[ ]*host " | \
grep -iv "^[ ]*hostname " | \
grep -iv "^[ ]*port " | \
grep -iv "^[ ]*#"| \
grep -iv "^[ ]*ProxyCommand");
# grep -iv "^[ ]*ProxyCommand"| \
# grep -iv "^[ ]*DynamicForward");
fi
debug "added ${hostname[${hops}]} with options ${options[${hops}]}"
}
error_exit() {
@ -130,6 +108,7 @@ help_message() {
-h, --help Display this help message and exit.
-v verbose output from ssh
-id ignore default routing
-ip ignore proxies defined on config
-n use plain ssh, with no copying of rc files
-d debug
-s nnnn socks port
@ -238,6 +217,8 @@ while [[ -n $1 ]]; do
_USE_DEBUG=1 ;;
-id | --ignore-default)
ignore_default_route=1 ;;
-ip | --ignore-proxies)
ignore_proxies=1 ;;
-n | --no-rc)
use_ssh=1 ;;
-s | --socks)
@ -259,16 +240,35 @@ fi
# Main logic
if [ ! -z "$DEFAULT_SSH_ROUTE" ] && [ "$ignore_default_route" -eq "0" ]; then
debug "default route is set to $DEFAULT_SSH_ROUTE"
# loop in case there is more than one hop in the default route
for h in ${DEFAULT_SSH_ROUTE}; do
((default_hops++))
debug "adding default hop $h"
add_hop "$h"
done
first_default=$(echo "${DEFAULT_SSH_ROUTE}" | awk '{print $1}')
first_hop=$(echo "${host_list}" | awk '{print $1}')
ignore_dr=$(sed -n "/[Hh]ost.* ${first_hop}\( \|$\)/,/^[ ]*$/p" ~/.ssh/config | grep -c "Ignore_DEFAULT_SSH_ROUTE");
if [[ "$first_default" == "$first_hop" ]]; then
debug "ignoring default route as first hop is default route"
elif [[ "$ignore_dr" -gt 0 ]]; then
debug "ignoring $ignore_dr default route as first hop as comment Ignore_DEFAULT_SSH_ROUTE"
else
debug "unsing default route - $DEFAULT_SSH_ROUTE"
# loop in case there is more than one hop in the default route
for h in ${DEFAULT_SSH_ROUTE}; do
debug "adding default hop $h"
add_hop "$h"
done
fi
fi
for h in ${host_list}; do
if [[ "$ignore_proxies" -eq 0 ]]; then
hdata=$(sed -n "/[Hh]ost.* ${h}\( \|$\)/,/^[ ]*$/p" ~/.ssh/config);
h_proxy=$(echo "${hdata}" | grep -i "^[ ]*ProxyCommand" | awk '{print $3}')
if [[ "$h_proxy" == "-q" ]]; then
h_proxy=$(echo "${hdata}" | grep -i "^[ ]*ProxyCommand" | awk '{print $4}')
fi
if [[ ! -z "$h_proxy" ]]; then
debug "adding proxy - $h_proxy"
add_hop "$h_proxy"
fi
fi
debug "adding hop $h"
add_hop "$h"
done
@ -289,7 +289,7 @@ done
if [ ! -z "$socks" ] && [ $i -eq ${hops} ] ; then
echo " DynamicForward localhost:${socks}"
fi
echo " ProxyCommand ssh -F ${conffile} ${opt} ${host[${i}-1]} -W ${hostname[${i}]}:${port[${i}]}"
echo " ProxyCommand ssh -q -F ${conffile} ${opt} ${host[${i}-1]} -W ${hostname[${i}]}:${port[${i}]}"
echo " "
let i=i-1
done
@ -316,6 +316,7 @@ if [ ${_USE_DEBUG} -eq 1 ]; then
fi
debug "command: sshrc ${opt} -F $conffile ${host[${hops}]}"
if [ "$use_ssh" -eq 1 ]; then
# shellcheck disable=SC2029
ssh ${opt} -F "$conffile" "${host[${hops}]}"


Loading…
Cancel
Save