/usr/sbin/remote_gahp is in htcondor 8.4.2~dfsg.1-1build1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | #!/bin/bash
################################################################################
# blahp-over-ssh shim script
#
# command [options] [user@]hostname [options] command [remote arguments]
#
# Options:
# see usage string
#
# Arguments:
# mandatory: hostname, command
#
# Remote arguments are passed along
#
# Assumes public/private key pair is already created and exists on host
#
# Exits with 0 on success, 1 if wrong arguments, < 0 if ssh-add failed, > 0 if ssh failed
################################################################################
#Defaults
REMOTE_CMD=""
REMOTE_HOSTNAME=""
REMOTE_USER=`whoami`
# Fix the home directory when spawned from a root process
unset HOME
export HOME=`echo ~`
# Needs '~' because resolved on remote site
REMOTE_GLITE="~/bosco/glite"
# We do this in case $HOME isn't set properly
PASSPHRASE_LOCATION=`echo ~/.bosco/.pass`
PRIVATE_KEY_LOCATION=`echo ~/.ssh/bosco_key.rsa`
# Parse command line arguments
PROG_NAME=$0
USAGE="Usage: $PROG_NAME [options] remote_hostname [options] REMOTE_CMD [remote arguments]\n \
$PROG_NAME [options] remote_hostname [remote options and arguments]\n \
Options: \n \
--rgahp-user REMOTE_USER \tuser name on the remote host\n \
--rgahp-key PRIVATE-KEY-PATH \tlocation of ssh private key (~/.ssh/bosco_key.rsa)\n \
--rgahp-nokey \t\tno ssh private key or key already enabled (same as empty rgahp-key)\n \
--rgahp-pass PASSPHRASE \tlocation of passphrase protecting ssh private key (~/.bosco/.pass)\n \
--rgahp-nopass \t\tno passphrase protecting ssh private key (same as empty rgahp-pass)\n \
--rgahp-glite PATH \tpath to the directory of the script (~/bosco/glite)\n \
--rgahp-script SCRIPT \tpath to script to start up blahp (PATH/bin/batch_gahp)\n \
--help, -h \t\t\tprint this\n \
remote_hostname: USER@HOST same string that can be used to ssh to the host\n \
remote arguments are passed to the REMOTE_CMD
REMOTE_CMD can be expressed as argument or option
"
while [ $# != 0 ] ; do
case "$1" in
-h | --help ) echo -e "$USAGE"
exit 0;;
--rgahp-user ) REMOTE_USER="$2"
shift 2;;
--rgahp-nokey ) PRIVATE_KEY_LOCATION=""
shift ;;
--rgahp-key ) PRIVATE_KEY_LOCATION="$2"
shift ; shift ;;
--rgahp-pass ) PASSPHRASE_LOCATION="$2"
shift 2;;
--rgahp-nopass ) PASSPHRASE_LOCATION=""
shift ;;
--rgahp-glite ) REMOTE_GLITE="$2"
shift 2;;
--rgahp-script ) REMOTE_CMD="$2"
shift 2;;
--rgahp-* ) echo "Unknown option: $1" 1>&2
echo -e "$USAGE"
exit 1;;
-- ) shift
if [ "$REMOTE_CMD" = "" ] ; then
REMOTE_CMD="$1"
shift
fi
break;;
-* ) break;;
* )
if [ "$REMOTE_HOSTNAME" = "" ] ; then
REMOTE_HOSTNAME=`echo "$1" | sed 's/.*@//'`
echo "$1" | grep -q '@'
if [ $? -eq 0 ] ; then
REMOTE_USER=`echo "$1" | sed 's/@.*//'`
fi
shift
elif [ "$REMOTE_CMD" = "" ] ; then
REMOTE_CMD="$1"
shift
else
break
fi
;;
esac
done
if [ "$REMOTE_HOSTNAME" = "" ] ; then
echo "Missing hostname" 1>&2
echo -e "$USAGE"
exit 1
fi
if [ "$REMOTE_CMD" = "" ] ; then
echo "Missing remote command" 1>&2
echo -e "$USAGE"
exit 1
fi
##### Handling authentication #####
# Start and init ssh agent if key file is specified
# if a ssh key is required, start up a ssh-agent and do ssh-add
if [ -n "$PRIVATE_KEY_LOCATION" -a -f "$PRIVATE_KEY_LOCATION" ] ; then
# start the ssh-agent
eval `ssh-agent -s` 1>&2
# Call the external program to do ssh-add
# If a passphrase is required pass it to the script
if [ -n "$PASSPHRASE_LOCATION" ]; then
bosco_ssh_start --key "$PRIVATE_KEY_LOCATION" --pass "$PASSPHRASE_LOCATION"
else
bosco_ssh_start --key "$PRIVATE_KEY_LOCATION" --nopass
fi
ADD_STATUS=$?
# check if ssh-add failed
if [ $ADD_STATUS != 0 ] ; then
eval `ssh-agent -sk` 1>&2
exit $ADD_STATUS
fi
fi
##### Running remote command and cleanup #####
# remove hostname from arglist
shift
# use BatchMode so we fail if a password is requested
#echo "** Follows output of: ssh -o \"BatchMode yes\" $REMOTE_USER@$REMOTE_HOSTNAME /bin/bash -c \"'GLITE_LOCATION=$REMOTE_GLITE $REMOTE_GLITE/bin/batch_gahp $*'\""
if [ "${REMOTE_CMD}" = "batch_gahp" ] ; then
ssh -o "BatchMode yes" $REMOTE_USER@$REMOTE_HOSTNAME /bin/bash -l -c "'GLITE_LOCATION=$REMOTE_GLITE $REMOTE_GLITE/bin/batch_gahp $*'"
SSH_STATUS=$?
elif [ "${REMOTE_CMD}" = "condor_ft-gahp" ] ; then
# We need to set up a tunnel from the remote machine for the file
# transfer TCP connections. If we knew that both sides were running
# OpenSSH 5.2p1 or later, we could have ssh pick the port on the
# remote end. But we don't, so we pick a random port and hope it's
# not already in use.
# We mimic the message that newer versions of OpenSSH print when
# binding a dynamic port for tunneling. The gridmanager looks for
# this message to know which port to tell the ft-gahp to use.
# If the local OpenSSH is 4.4p1 or later (we check for 5.0 or later
# for simplicity), then we can use ExitOnForwardFailure and try
# several random ports in case we get unlucky on the first attempt.
# We extract the IP and port on which the gridmanager can be
# contacted from $CONDOR_INHERIT.
GRIDMANAGER_ADDRESS=`echo "$CONDOR_INHERIT" | sed 's/[^<]*<\([^?>]*\).*/\1/'`
SSH_STATUS=255
if [[ `ssh -V 2>&1` =~ ^OpenSSH_[5-9].* ]] ; then
SSH_ARGS="-o ExitOnForwardFailure=yes"
tries=3
else
tries=1
fi
while ((tries-- > 0 && SSH_STATUS == 255)) ; do
let port=${RANDOM}+32768
ssh $SSH_ARGS -R $port:$GRIDMANAGER_ADDRESS -o "BatchMode yes" $REMOTE_USER@$REMOTE_HOSTNAME /bin/bash -l -c "'echo Allocated port $port for remote forward to 1>&2 ; CONDOR_CONFIG=$REMOTE_GLITE/etc/condor_config.ft-gahp $REMOTE_GLITE/bin/condor_ft-gahp -f $*'"
SSH_STATUS=$?
done
else
echo "Unknown remote command (${REMOTE_CMD})" 1>&2
SSH_STATUS=1
fi
# kill the ssh-agent if it exists
eval `ssh-agent -sk` 1>&2
exit $SSH_STATUS
|