1*9880d681SAndroid Build Coastguard Worker#!/bin/sh 2*9880d681SAndroid Build Coastguard Worker# 3*9880d681SAndroid Build Coastguard Worker# Program: RemoteRunSafely.sh 4*9880d681SAndroid Build Coastguard Worker# 5*9880d681SAndroid Build Coastguard Worker# Synopsis: This script simply runs another program remotely using ssh. 6*9880d681SAndroid Build Coastguard Worker# It always returns the another program exit code or exit with 7*9880d681SAndroid Build Coastguard Worker# code 255 which indicates that the program could not be executed. 8*9880d681SAndroid Build Coastguard Worker# 9*9880d681SAndroid Build Coastguard Worker# Syntax: 10*9880d681SAndroid Build Coastguard Worker# 11*9880d681SAndroid Build Coastguard Worker# RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>] 12*9880d681SAndroid Build Coastguard Worker# <program> <args...> 13*9880d681SAndroid Build Coastguard Worker# 14*9880d681SAndroid Build Coastguard Worker# where: 15*9880d681SAndroid Build Coastguard Worker# <hostname> is the remote host to execute the program, 16*9880d681SAndroid Build Coastguard Worker# <login_name> is the username on the remote host, 17*9880d681SAndroid Build Coastguard Worker# <port> is the port used by the remote client, 18*9880d681SAndroid Build Coastguard Worker# <program> is the path to the program to run, 19*9880d681SAndroid Build Coastguard Worker# <args...> are the arguments to pass to the program. 20*9880d681SAndroid Build Coastguard Worker# 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard WorkerprintUsageAndExit() 23*9880d681SAndroid Build Coastguard Worker{ 24*9880d681SAndroid Build Coastguard Worker echo "Usage:" 25*9880d681SAndroid Build Coastguard Worker echo "./RemoteRunSafely.sh <hostname> [-l <login_name>] [-p <port>] " \ 26*9880d681SAndroid Build Coastguard Worker "<program> <args...>" 27*9880d681SAndroid Build Coastguard Worker exit 255 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard WorkermoreArgsExpected() 31*9880d681SAndroid Build Coastguard Worker{ 32*9880d681SAndroid Build Coastguard Worker # $1 - remaining number of arguments 33*9880d681SAndroid Build Coastguard Worker # $2 - number of arguments to shift 34*9880d681SAndroid Build Coastguard Worker if [ $1 -lt $2 ] 35*9880d681SAndroid Build Coastguard Worker then 36*9880d681SAndroid Build Coastguard Worker echo "Error: Wrong number of argumants." 37*9880d681SAndroid Build Coastguard Worker printUsageAndExit 38*9880d681SAndroid Build Coastguard Worker fi 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker# Save a copy of the original arguments in a string before we 42*9880d681SAndroid Build Coastguard Worker# clobber them with the shift command. 43*9880d681SAndroid Build Coastguard WorkerORIG_ARGS="$*" 44*9880d681SAndroid Build Coastguard Worker#DEBUG: echo 'GOT: '$ORIG_ARGS 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard WorkermoreArgsExpected $# 1 47*9880d681SAndroid Build Coastguard WorkerRHOST=$1 48*9880d681SAndroid Build Coastguard Workershift 1 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard WorkerRUSER=`id -un` 51*9880d681SAndroid Build Coastguard WorkerRCLIENT=ssh 52*9880d681SAndroid Build Coastguard WorkerRPORT= 53*9880d681SAndroid Build Coastguard WorkerWORKING_DIR= 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard WorkermoreArgsExpected $# 1 56*9880d681SAndroid Build Coastguard Workerif [ $1 = "-l" ]; then 57*9880d681SAndroid Build Coastguard Worker moreArgsExpected $# 2 58*9880d681SAndroid Build Coastguard Worker RUSER=$2 59*9880d681SAndroid Build Coastguard Worker shift 2 60*9880d681SAndroid Build Coastguard Workerfi 61*9880d681SAndroid Build Coastguard WorkermoreArgsExpected $# 1 62*9880d681SAndroid Build Coastguard Workerif [ $1 = "-p" ]; then 63*9880d681SAndroid Build Coastguard Worker moreArgsExpected $# 2 64*9880d681SAndroid Build Coastguard Worker RPORT="-p $2" 65*9880d681SAndroid Build Coastguard Worker shift 2 66*9880d681SAndroid Build Coastguard Workerfi 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard WorkermoreArgsExpected $# 1 69*9880d681SAndroid Build Coastguard WorkerPROGRAM=$(basename $1) 70*9880d681SAndroid Build Coastguard WorkerWORKING_DIR=$(dirname $1) 71*9880d681SAndroid Build Coastguard Workershift 1 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker#DEBUG: echo 'DIR='${0%%`basename $0`} 74*9880d681SAndroid Build Coastguard Worker#DEBUG: echo 'RHOST='$RHOST 75*9880d681SAndroid Build Coastguard Worker#DEBUG: echo 'RUSER='$RUSER 76*9880d681SAndroid Build Coastguard Worker#DEBUG: echo 'PROGRAM='$PROGRAM 77*9880d681SAndroid Build Coastguard Worker#DEBUG: echo 'WORKING_DIR='$WORKING_DIR 78*9880d681SAndroid Build Coastguard Worker#DEBUG: echo 'ARGS='$* 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker# Sanity check 81*9880d681SAndroid Build Coastguard Workerif [ "$RHOST" = "" -o "$PROGRAM" = "" ]; then 82*9880d681SAndroid Build Coastguard Worker printUsageAndExit 83*9880d681SAndroid Build Coastguard Workerfi 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker# Local program file must exist and be execuatble 86*9880d681SAndroid Build Coastguard Workerlocal_program=$WORKING_DIR"/"$PROGRAM 87*9880d681SAndroid Build Coastguard Workerif [ ! -x "$local_program" ]; then 88*9880d681SAndroid Build Coastguard Worker echo "File "$local_program" does not exist or is not an executable.." 89*9880d681SAndroid Build Coastguard Worker exit 255 90*9880d681SAndroid Build Coastguard Workerfi 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerconnection=$RUSER'@'$RHOST 93*9880d681SAndroid Build Coastguard Workerremote="./"$PROGRAM 94*9880d681SAndroid Build Coastguard Worker( 95*9880d681SAndroid Build Coastguard Worker cat $local_program | \ 96*9880d681SAndroid Build Coastguard Worker $RCLIENT $connection $RPORT \ 97*9880d681SAndroid Build Coastguard Worker 'rm -f '$remote' ; ' \ 98*9880d681SAndroid Build Coastguard Worker 'cat > '$remote' ; chmod +x '$remote' ; '$remote' '$*' ; ' \ 99*9880d681SAndroid Build Coastguard Worker 'err=$? ; rm -f '$remote' ; exit $err' 100*9880d681SAndroid Build Coastguard Worker) 101*9880d681SAndroid Build Coastguard Workererr=$? 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker#DEBUG: echo script exit $err 104*9880d681SAndroid Build Coastguard Workerexit $err 105*9880d681SAndroid Build Coastguard Worker 106