chiark / gitweb /
hacks/ssh: Redirect the master's output and error.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 9 Jul 2011 12:32:39 +0000 (13:32 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 9 Jul 2011 13:24:43 +0000 (14:24 +0100)
Otherwise it inherits our streams, and something waiting from EOF from
us will become seriously disappointed.  It's not like the master has
anything especially interesting to say on stdout anyway.  The error
stream is captured into a logfile for later perusal.

Just stdout wasn't enough.

hacks/ssh

index a11c7773209df1d37d13e1d1121d914377dd13a2..16b75782352fb6e694e46da4d1c4b025d86871b8 100755 (executable)
--- 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,11 @@ case "$mode" in
     exec "$REAL_SSH" "${opts[@]}" ${host+"$host"} "$@"
     ;;
   m)
+    mkdir -p -m700 "$SSH_LOGDIR"
+    logfile=$SSH_LOGDIR/${login+"$login@"}"$host"${port+":$port"}.log
     if ! "$REAL_SSH" -Ocheck ${login+"$login@"}"$host" >/dev/null 2>&1; then
-      "$REAL_SSH" -MNf "${masteropts[@]}" "$host"
+      "$REAL_SSH" -MNf "${masteropts[@]}" "$host" \
+       </dev/null >/dev/null 2>$logfile
     fi
     exec "$REAL_SSH" ${opts[@]} "$host" "$@"
     ;;