--- /dev/null
+TODO
+====
+
+* Enhanced shell:
+ * Add a counter-measure to prevent SSH timing attacks:
+ http://users.ece.cmu.edu/~dawnsong/papers/ssh-timing.pdf
+ http://www.slideshare.net/idsecconf/countermeasure-against-timing-attack-on-ssh-using-random-delay
+ http://www.scribd.com/doc/59628153/Timing-Analysis-of-Keystrokes-and-Timing-Attacks-on-SSH-Revisited
--- /dev/null
+#!/bin/bash
+#
+# Simple autossh and screen wrapper.
+#
+
+# Parameters
+BASENAME="`basename $0`"
+DEST="$1"
+COMMAND="$2"
+
+# Set screen title
+# http://stackoverflow.com/questions/899609/gnu-screen-run-script-that-sends-commands-to-the-screen-session-it-is-being-run
+function screen_title {
+ if [ -n "$STY" ]; then
+ screen -X title $1
+ fi
+}
+
+# Syntax check
+if [ -z "$DEST" ]; then
+ exit 1
+fi
+
+# Set default screen title
+screen_title $DEST
+
+# Dispatcher
+if [ "$BASENAME" == "shells" ]; then
+ # Remote screen shell using autossh
+ if [ "$COMMAND" == "root" ]; then
+ autossh $DEST -t -- sudo screen -x
+ else
+ autossh $DEST -t -- screen -x $COMMAND
+ fi
+else
+ if [ -z "$COMMAND" ] && screen -ls $DEST | grep -q "There is a screen on"; then
+ # Local existing screen shell
+ wscreen $DEST
+ elif [ -z "$COMMAND" ] && [ "$DEST" == "root" ]; then
+ # Local root shell
+ screen_title root
+ sudo screen -x
+ elif [ "$DEST" == "local" ]; then
+ # Local screen shell
+ screen_title $COMMAND
+ wscreen $COMMAND
+ else
+ # Remote shell using autossh
+ autossh $DEST -t -- $COMMAND
+ fi
+fi
+
+# Restore screen title
+screen_title terminal
--- /dev/null
+shell
\ No newline at end of file
--- /dev/null
+#
+# Workscreen: screen session wrapper
+#
+# Alternative:
+# http://byobu.co
+# http://packages.debian.org/stable/byobu
+#
+
+# Default options.
+opts="-c /etc/screenrc"
+
+# Remove dead screens.
+screen -wipe &> /dev/null
+
+# Session selection.
+if [ ! -z "$1" ]; then
+ if screen -ls $1 | grep -q "There is a screen on"; then
+ #echo "There's already a screen called $1"
+ #exit 1
+ screen -x $1
+ exit $?
+ else
+ session="-S $1"
+ fi
+
+ if [ "$1" == "main" ]; then
+ opts=""
+ elif [ "$1" == "root" ]; then
+ sudo screen -x
+ exit
+ elif [ -f "$HOME/.screen/$1" ]; then
+ opts="-c $HOME/.screen/$1"
+ elif [ -f "$HOME/.screen/base" ]; then
+ opts="-c $HOME/.screen/base"
+ fi
+fi
+
+# Start session.
+screen $opts $session