-
Notifications
You must be signed in to change notification settings - Fork 0
/
sshWrapper.sh
69 lines (52 loc) · 2.19 KB
/
sshWrapper.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# https://github.com/lfromanini/sshWrapper
#
# ssh wrapper to retrieve sshpass arguments and connect to host
# reads [ LocalCommand sshpass ] parameters in file [ ~/.ssh/sshpass ]
#
# examples ( accepts regex similar to used in ~/.ssh/config ):
#
# Host my.ssh.server
# LocalCommand sshpass -p thisIsThePassword
#
# Host *.localdomain
# LocalCommand sshpass -f path/to/fileContainingThePassword
function __sshwrapper::scp()
{
local readonly SCP=$( whereis -b scp | command awk '{ print $2 }' )
local args=""
local argType=""
local argPass=""
local sshHost=""
sshHost=$( echo "$@" | command awk -F ':' '/:/ { print $1 }' | command awk -F '@' '{ print $NF }' | command awk '{ print $NF }' )
args=$( command ssh "${sshHost}" -F ~/.ssh/sshpass -G 2>/dev/null | command grep --max-count=1 --ignore-case "LocalCommand \+sshpass" | command awk '{ $1=$2="" ; print $0 }' | command sed 's/^[[:blank:]]*//' )
if [ -z "${args}" ] || [ -z "$( whereis -b sshpass | command awk '{ print $2 }' )" ] ; then
# no sshpass arguments set in ~/.ssh/sshpass file or sshpass not installed
"${SCP}" "$@"
else
argType="${args:0:2}"
argPass=$( echo "${args:2}" | command sed 's/^[[:blank:]]*//' )
# variable expansion
[ "${argType}" = "-f" ] && argPass=$( eval echo "${argPass}" )
command sshpass "${argType}""${argPass}" "${SCP}" "$@"
fi
}
function __sshwrapper::ssh()
{
local readonly SSH=$( whereis -b ssh | command awk '{ print $2 }' )
local args=""
local argType=""
local argPass=""
args=$( "${SSH}" "$@" -F ~/.ssh/sshpass -G 2>/dev/null | command grep --max-count=1 --ignore-case "LocalCommand \+sshpass" | command awk '{ $1=$2="" ; print $0 }' | command sed 's/^[[:blank:]]*//' )
if [ -z "${args}" ] || [ -z "$( whereis -b sshpass | command awk '{ print $2 }' )" ] ; then
# no sshpass arguments set in ~/.ssh/sshpass file or sshpass not installed
"${SSH}" "$@"
else
argType="${args:0:2}"
argPass=$( echo "${args:2}" | command sed 's/^[[:blank:]]*//' )
# variable expansion
[ "${argType}" = "-f" ] && argPass=$( eval echo "${argPass}" )
command sshpass "${argType}""${argPass}" "${SSH}" "$@" -o PreferredAuthentications=password
fi
}
alias scp="__sshwrapper::scp"
alias ssh="__sshwrapper::ssh"