- 
            
      
        
      
    Star
      
          
          (177)
      
  
You must be signed in to star a gist  - 
              
      
        
      
    Fork
      
          
          (62)
      
  
You must be signed in to fork a gist  
- 
      
 - 
        
Save dmytro/3984680 to your computer and use it in GitHub Desktop.  
| #!/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 | 
Hi I did a fork here : https://gist.github.com/nomad-fr/8f2316c24c9d488a603b
it check that you are inside a tmux session and if not create one
I add some options like :
-u to change user for ssh set by defaut to root
-d (destination) then you can specified several host
-d "$(echo 'serv'{0..3})"
-d "serv0 serv1 serv2 serv3"'
-d "$(anotherscript)" # to call a script that give you a list of host
@nomad-fr https://gist.github.com/nomad-fr/8f2316c24c9d488a603b page not found?
thanks nice little script.
ah, found it here. https://github.com/nomad-fr/scripts-systems/blob/master/ssh-multi.sh
Great, thanks. I've included some more additions based on the work of @nomad-fr, including:
- Option to easily have localhost in the synchronized panes (-l),
 - No longer need to specify a user name (so that ~/.ssh/config settings will be used), and
 - No longer opens an extra tmux window when a new session is used.
 
https://github.com/olsonbg/dotfiles/blob/master/bin/ssh-multi.sh
Not fork of it, but
FYI: https://github.com/greymd/tmux-xpanes
$ xpanes -c "ssh {}" serv1 serv2 serv3 ...
    @greymd xpanes is much more then a mere multi-ssh script. Thanks for sharing it.
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.
@greymd xpanes! - Thank you! I've been looking for exactly this off and on for two years.
#!/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.
#!/usr/bin/env bash
instead of of hardcoded shebang
Thank you, sir. I found your code very useful for setting environments across multiple servers.
Nice :)
Little mod for Tmux 2.1 need to add a target for each event. This sets the target to ssh-multi with the first host in the name:
edit: small change to make target correct.