Diff: SshAlwaysScreen
Differences between version 4 and predecessor to the previous major change of SshAlwaysScreen.
Other diffs: Previous Revision, Previous Author
| Newer page: | version 4 | Last edited on May 14, 2016 9:25 pm | by PhilHollenback | Revert | 
| Older page: | version 3 | Last edited on April 20, 2016 4:17 pm | by PhilHollenback | Revert | 
version 4
This one is for the sysadmins out there. If you use this, you will never have to worry about losing long-running commands when you get disconnected from a remote server.
tl;dr: you should be automatically starting screen when you ssh to remote hosts. This has saved my butt many times. My script below either forces a reconnect to an existing screen session, or starts a new session if one doesn't already exist.
You could substitute tmux if you want, I just don't know the equivalent of screen's -D -RR functionality.
One small annoyance is you get double logins for login failures not related to screen. Oh wel.
Anyway, here's my frankly not very good script.  Stick it in your .bashrc:
# always use screen on remote hosts if possible
ssh ()
{
    if [ x$1 = x ]
    then
        # ssh doesn't make sense without arguments
        echo "must supply hostname" >%2
    elif [ x"$2" = "x" ]
    then
        # only hostname specified, try to ssh and launch screen
        if ! /usr/bin/ssh -t $1 screen -A -D -RR
        then
            # if attempt to launch screen failed, fall back to regular
            # ssh
            /usr/bin/ssh $@
        fi
    else
        # if user passes more than one arg, it's something to execute
        # on remote host, and thus we don't want to launch remote
        # screen.
        /usr/bin/ssh $@
    fi
}
Anyway, like I said, this will always try to reconnect to an existing screen session, or start a new one if there isn't one on the remote host.
I also recommend that if you run screen on your local machine too, you bind your screen prefix to ctrl-B instead of the default of ctrl-A.  Then ctrl-A will always affect the remote session, not your local session. I know it sounds a little complicated, but you get used to it pretty quick.  If you need to send a ctrl-A through to the remote server (for example, to go to the beginning of the line), hit ctrl-A A.
If you often log on to random servers, give this a try. You won't regret it.

