This file is indexed.

/usr/sbin/remote_gahp is in htcondor 8.0.5~dfsg.1-1ubuntu1.

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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#!/bin/bash

################################################################################
# blahp-over-ssh shim script
#
# command [options] remote_hostname [remote options/arguments]
#
# Options:
#   see usage string 
#
# Arguments:
#   mandatory: remote_hostname
#
# Remote options/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`


# List of remote hosts to connect to
# Customize this for different remote hosts
# This overrides the default and is overridden by options
#
# Format:
# "remote_hostname remote_script_path passphrase_location private_key_location"
# - remote_hostname: name of server to connect to (required)
# - remote_script_path: path to script to start up blahp (required)
# - passphrase_location: location of passphrase protecting ssh private key
#     (default is no passphrase required)
# - private_key_location: location of ssh private key (default is ~/.ssh/id_rsa)

REMOTE_HOSTS=(
	"glow-c004 /home/slauson/remote-test/batch_gahp.wrapper /scratch.1/slauson/condor-blahp_over_ssh/passphrase"
	"condor-student1 /afs/cs.wisc.edu/u/s/l/slauson/public/test /afs/cs.wisc.edu/u/s/l/slauson/private/condor/git2/CONDOR_SRC/src/passphrase"
)


###### Setting options #####
# 1. defaults
# 2. host defaults from REMOTE_HOSTS list
# 3. command line options
# Higher number overrides the lower one

# Parse command line arguments 
PROG_NAME=$0
USAGE="Usage: $PROG_NAME [options] remote_hostname remote_cmd [remote options and arguments]\n \
 --rgahp-user REMOTE_USER \tuser name on the remote host\n \
 --rgahp-key PRIVATE-KEY-PATH \tlocation of ssh private key (~/.ssh/id_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-script SCRIPT \tpath to script to start up blahp (~/.bosco/batch_gahp)\n \
 --help, -h \t\t\tprint this\n \
"
if [ `uname` = "Darwin" ] ; then
    # Mac OS X doesn't have GNU getopt, so not fancy argument checking here
    # TODO This means that the --rgahp-* options aren't supported on
    #   Mac OS X. We should fix that sometime.
    eval set -- -- "$@"
else
    TEMP=`getopt -o +h --long help,rgahp-user:,rgahp-key:,rgahp-nokey,rgahp-pass:,rgahp-nopass,rgahp-script: -- "$@"`

    if [ $? != 0 ] ; then echo -e "$USAGE" >&2 ; exit 1 ; fi

    eval set -- "$TEMP"
fi

# Remote hostname is mandatory
# It is the first argument after the rgahp options
tmp_found=1
for i; do
	if [ $tmp_found -eq 0 ] ; then 
		if [ "x${REMOTE_HOSTNAME}" = "x" ] ; then
		    REMOTE_HOSTNAME=`echo "$i" | sed 's/.*@//'`
		    echo "$i" | grep -q '@'
		    if [ $? -eq 0 ] ; then
		        REMOTE_USER=`echo "$i" | sed 's/@.*//'`
		    fi
		else
		    REMOTE_CMD="$i"
		    break
		fi
	fi
	if [ "$i" = "--" ]; then tmp_found=0; fi
done

if [ "X${REMOTE_HOSTNAME}X" = "XX" ] ; then echo -e "$USAGE" >&2 ; exit 1 ; fi


# Go through possible remote hosts and set eventual host default
for host in "${REMOTE_HOSTS[@]}" ; do

	# split string on ' '
	parts=($host)

	# check if this is a host we care about
	if [ "$REMOTE_HOSTNAME" == ${parts[0]} ] ; then
		#REMOTE_HOSTNAME=${parts[0]}
		REMOTE_GLITE=${parts[1]}
		PASSPHRASE_LOCATION=${parts[2]}
		PRIVATE_KEY_LOCATION=${parts[3]}
		break
	fi
done

# Set values specified in command line arguments (these override defaults and REMOTE_HOSTS)
for i; do
	case "$i" 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;;
		--  ) shift; break ;;
	esac
done


##### Handling authentication #####
# Start and init ssh agent if key file is specified


# if a passphrase is required, start up a ssh-agent and do ssh-add
if [ "$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
	bosco_ssh_start
	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" 1>&2
    SSH_STATUS=1
fi

# kill the ssh-agent if it exists
eval `ssh-agent -sk` 1>&2

exit $SSH_STATUS