Skip to content

Instantly share code, notes, and snippets.

@dmytro
Created October 31, 2012 03:46
Show Gist options
  • Save dmytro/3984680 to your computer and use it in GitHub Desktop.
Save dmytro/3984680 to your computer and use it in GitHub Desktop.
Start multiple synchronized SSH connections with Tmux
#!/bin/bash
# ssh-multi
# D.Kovalov
# Based on http://linuxpixies.blogspot.jp/2011/06/tmux-copy-mode-and-how-to-control.html
# a script to ssh multiple servers over multiple tmux panes
starttmux() {
if [ -z "$HOSTS" ]; then
echo -n "Please provide of list of hosts separated by spaces [ENTER]: "
read HOSTS
fi
local hosts=( $HOSTS )
tmux new-window "ssh ${hosts[0]}"
unset hosts[0];
for i in "${hosts[@]}"; do
tmux split-window -h "ssh $i"
tmux select-layout tiled > /dev/null
done
tmux select-pane -t 0
tmux set-window-option synchronize-panes on > /dev/null
}
HOSTS=${HOSTS:=$*}
starttmux
@sillykelvin
Copy link

Great little script! Especially this one: tmux set-window-option synchronize-panes on > /dev/null, it's something magic for me! I was using clusterssh before for the same feature, and never know tmux can do this!

BTW: the script in original post works well with tmux 2.1 for me, on a Ubuntu 16.04 box with tmux installed by apt, tmux -V says tmux 2.1.

@ttroutman
Copy link

@greymd xpanes! - Thank you! I've been looking for exactly this off and on for two years.

@WMcKibbin
Copy link

WMcKibbin commented Mar 29, 2019

#!/bin/bash
#tmux-ssh.sh                                                                                                                                                                                                         
# Assume session is 0
tmux attach-session -t 0
WINDOW=$(tmux display-message -p "#I")
FIRST_ARG=""

for arg in $*; do
    if [[ $arg != *"%"* ]]; then
        if [[ $FIRST_ARG == "" ]]; then
            FIRST_ARG=$arg
            tmux send-keys "ssh $arg" Enter
        else
            tmux split-window "ssh $arg"
        fi
        tmux select-layout tiled
    fi
done
tmux set-window-option synchronize-panes on

This is how my old co-worker accomplished this, figured I'd drop in this thread not as a replacement but an alternate option.

@abunimeh
Copy link

#!/usr/bin/env bash
instead of of hardcoded shebang

@Kimeg
Copy link

Kimeg commented Jan 11, 2021

Thank you, sir. I found your code very useful for setting environments across multiple servers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment