Automatically attaching to a tmux session via SSH
I've been using tmux as a screen replacement for a while now. I find it easier to use and configure than screen. I tend to leave a tmux session running on servers that I administer so that everything is just as it was when I last connected. It's very handy.
To make this even more convenient, I wanted to be able to automatically attach to a running tmux session when connecting to servers using SSH. The SSH client already comes with the ability to run a command when connecting. It works like this:
1 ssh <hostname> <command>
Unfortunately, this didn't work when I tried attaching to a tmux session.
1 2 ssh <hostname> tmux a not a terminal
After a bit of Googling, it turns out that you need to supply the
ssh command. The ssh man page describes the option as such:
1 2 3 4 -t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g., when implementing menu services.
If we do that, we're in business:
1 ssh <hostname> -t tmux a
To make the command even shorter, I've been adding bash aliases to my
~/.bash_profile for each server I connect to, like so:
1 alias servername="ssh servername -t tmux a"
Now, I can just type
servername and get a SSH connection to servername with
tmux automatically attached. Issuing a
<ctrl> + b + d will detach the tmux
session and disconnect the SSH connection.
Command line magic!