X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/4d7d040beb835fa5ea0015d0e1202f61fa79c0c1..9651a84b95a10e444cdb5d0fb0558c7cda1ac28b:/hacks/ssh diff --git a/hacks/ssh b/hacks/ssh index a11c777..d8a46a4 100755 --- a/hacks/ssh +++ b/hacks/ssh @@ -25,6 +25,8 @@ ### 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. @@ -113,6 +115,13 @@ while :; do 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]*) masteropts=("${masteropts[@]}" "-${o:0:1}$arg") @@ -162,8 +171,14 @@ case "$mode" in 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 2>$logfile fi exec "$REAL_SSH" ${opts[@]} "$host" "$@" ;;