RemoteRunSafely.sh [plain text]
#!/bin/sh
printUsageAndExit()
{
echo "Usage:"
echo "./RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>] " \
"<program> <args...>"
exit 255
}
moreArgsExpected()
{
if [ $1 -lt $2 ]
then
echo "Error: Wrong number of argumants."
printUsageAndExit
fi
}
ORIG_ARGS="$*"
moreArgsExpected $RHOST=$1
shift 1
RUSER=`id -un`
RCLIENT=ssh
RPORT=
WORKING_DIR=
moreArgsExpected $if [ $1 = "-l" ]; then
moreArgsExpected $ RUSER=$2
shift 2
fi
moreArgsExpected $if [ $1 = "-p" ]; then
moreArgsExpected $ RPORT="-p $2"
shift 2
fi
moreArgsExpected $PROGRAM=$(basename $1)
WORKING_DIR=$(dirname $1)
shift 1
if [ "$RHOST" = "" -o "$PROGRAM" = "" ]; then
printUsageAndExit
fi
local_program=$WORKING_DIR"/"$PROGRAM
if [ ! -x "$local_program" ]; then
echo "File "$local_program" does not exist or is not an executable.."
exit 255
fi
connection=$RUSER'@'$RHOST
remote="./"$PROGRAM
(
cat $local_program | \
$RCLIENT $connection $RPORT \
'rm -f '$remote' ; ' \
'cat > '$remote' ; chmod +x '$remote' ; '$remote' '$*' ; ' \
'err=$? ; rm -f '$remote' ; exit $err'
)
err=$?
exit $err