blob: 3efe64d0ea2c9fb2e1936ada164cf12528b7e544 (
plain)
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
70
71
72
|
#!/bin/bash
ARGC=$#
ARGV=($@)
SSH_IDENTITY=~/.ssh/id_rsa
SSH_PORT=22
SSH_HOST=
SSH_OPTIONS="-o NumberOfPasswordPrompts=0 -o StrictHostKeyChecking=no"
SSH="ssh $SSH_OPTIONS"
SCRIPT_FILE=
SCRIPT_INTERPRETER=/bin/sh
function parse_args() {
for (( i=0; i < $ARGC;i++ )); do
local ARGREGEX="^-.*"
if [[ ! ${ARGV[$i]} =~ $ARGREGEX ]]; then
[ -z $SSH_HOST ] && SSH_HOST=${ARGV[$i]} && continue
[ -z $SCRIPT_FILE ] && SCRIPT_FILE=${ARGV[$i]} && continue
print_help 1
fi
case ${ARGV[$i]} in
-p)
i=$((i+1))
SSH_PORT=${ARGV[$i]};;
-s)
i=$((i+1))
SSH=${ARGV[$i]} $SSH_OPTIONS;;
-i)
i=$((i+1))
SSH_IDENTITY=${ARGV[$i]};;
-h)
print_help 0;;
*)
echo Invalid Argument ${ARGV[$i]}
echo $0 -h for help
exit 1;;
esac
done
[ -z $SSH_HOST ] && echo No host specified && exit 1
[ -z $SCRIPT_FILE ] && echo No script specified && exit 1
}
function print_help() {
cat << EOF
Execute a script on a remote host via SSH
Usage:
$0 [OPTIONS] [USER@]HOST SCRIPT
-p <PORT> SSH port (default: 22)
-s <SSH> Custom SSH program
-i <IDENTITY> SSH Identity file (default: ~/.ssh/id_rsa.pub)
-h Print this help text
EOF
exit $1
}
parse_args
[ ! -f $SCRIPT_FILE ] && echo \"$SCRIPT_FILE\" not found && exit 1
INTERPRETER_STRING=$(head -n 1 $SCRIPT_FILE)
INTERPRETER_REGEX="^#!.*"
[[ $INTERPRETER_STRING =~ $INTERPRETER_REGEX ]] && SCRIPT_INTERPRETER=$(tail -c +3 <<< $INTERPRETER_STRING)
cat $SCRIPT_FILE | $SSH -p $SSH_PORT -i $SSH_IDENTITY $SSH_HOST $SCRIPT_INTERPRETER
|