### Configuration.
: ${REAL_SSH=/usr/bin/ssh}
+: ${SSH_HOME=$(unset HOME; bash -c 'echo ~/.ssh')}
+: ${SSH_LOGDIR=$SSH_HOME/log-$(hostname)}
###--------------------------------------------------------------------------
### Parse the command line and dredge out information.
login=$arg
;;
+ ## Catch the port number. We want this for building the logfile
+ ## name.
+ ?,p*)
+ masteropts=("${masteropts[@]}" "-p$arg")
+ port=$arg
+ ;;
+
## These options are interesting to the master connection.
- m,[aADLlRSwxXv]*)
+ m,[aADLlRSwxXv46]*)
masteropts=("${masteropts[@]}" "-${o:0:1}$arg")
;;
## A bare word. Maybe it's the hostname, or the start of the command.
*)
- case ${host-t} in
+ case ${host-t}${host+nil} in
t) host=$1 ;;
*) break ;;
esac
exec "$REAL_SSH" "${opts[@]}" ${host+"$host"} "$@"
;;
m)
- if ! "$REAL_SSH" -Ocheck ${login+"$login@"}"$host" >/dev/null 2>&1; then
- "$REAL_SSH" -MNf "${masteropts[@]}" "$host"
+ mkdir -p -m700 "$SSH_LOGDIR"
+ logfile=$SSH_LOGDIR/${login+"$login@"}"$host"${port+":$port"}.log
+ if ! "$REAL_SSH" -Ocheck \
+ ${port+-p$port} ${login+"$login@"}"$host" \
+ >/dev/null 2>&1
+ then
+ "$REAL_SSH" -MNf "${masteropts[@]}" "$host" \
+ </dev/null >/dev/null 2>$logfile
fi
exec "$REAL_SSH" ${opts[@]} "$host" "$@"
;;