How to use tmux with SSH connections?

Quick Answer

Use tmux with SSH to maintain persistent sessions that survive network disconnections. Either run ssh user@host then start tmux on the remote server, or use ssh user@host -t tmux to directly attach to a session. If disconnected, simply reconnect and reattach with ssh user@host followed by tmux attach.

ssh user@host -t tmux attach

Detailed Explanation

Combining tmux with SSH creates a resilient remote workflow that continues running even when your connection drops. This approach is invaluable for unstable networks, long-running processes, and remote development.

Method 1: Start tmux after connecting

# Step 1: Connect to remote server
$ ssh user@hostname

# Step 2: Start a new tmux session on the remote machine
$ tmux

# If disconnected, reconnect and reattach
$ ssh user@hostname
$ tmux attach

Method 2: One-command SSH with tmux

# Directly start or attach to tmux on connection
$ ssh user@hostname -t tmux

# Specifically attach to an existing session
$ ssh user@hostname -t tmux attach

# Create a new named session if none exists
$ ssh user@hostname -t tmux new -s mysession

# Attach to specific session
$ ssh user@hostname -t tmux attach -t mysession

The -t flag forces SSH to allocate a pseudo-terminal, which tmux requires.

Method 3: Creating a new session or attaching

# Create a session if none exists, or attach to existing one
$ ssh user@hostname -t tmux new-session -A -s mysession

The -A flag makes tmux attach if the session exists or create it if it doesn't.

Working with nested tmux sessions:

If you run tmux locally and on remote servers, you'll have nested tmux sessions. Use different prefix keys to avoid confusion:

# On your local machine's ~/.tmux.conf
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# On the remote machine's ~/.tmux.conf
# Keep the default Ctrl+b prefix

Now use Ctrl+a for your local tmux and Ctrl+b for the remote tmux.