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 -t option to 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!