Here is a quick script that can be improved. Not sure if the sleep functions are required, not sure if there are some extra selections, it can be a bit more dynamic and function oriented but for a first try it does a nice job!
PS: The Linux 'terminator' (application for multiple GNOME terminals in one window) can also broadcast typed input out-of-the-box.
[wvh@sapocvm1 ~]$ ./terms v sapocvm3 sapocvm2 sapocvm1

#!/bin/bash
# CONSTANT - never changes (unless the script is adjusted)
terms=8 # number of terminals to create - considered CONSTANT!
session_name=sshsync
# get special overwrite parameters
forcelayout=0 # tiled layout
if [ "${1}" == "t" -o "${1}" == "v" -o "${1}" == "h" ]
then
forcelayout=$1
shift
fi
# set some variables
args=$# # number of arguments representing remote sessions
exits=$(expr ${terms} - ${args} ) # number of terms too many we will generate
reallignterms=5 # when to reallign to all horizontal
# verify arguments
if [ ${args} -lt 1 ]
then
echo "ERR: please provide 1 to 8 servernames as arguments"
echo "
USAGE: $0 [t|v|h] <SpaceSepparatedHosListt[1-8]>
t = tiled layout, spread out as evenly in both rows and columns.
v = vertical tiled layout (wide output panes).
h = horizontally tiled layout (narrow long panes).
EXAMPLE: $0 127.0.0.1 localhost
"
exit 1
fi
if [ ${args} -gt 8 ]
then
echo "ERR: please provide maximum 8 servernames as arguments"
exit 1
fi
#this is going to setup the session and detach
tmux new-session -s ${session_name} -d
sleep 1
#this is going to split the pane into four even horizontal panes
tmux split-window -t ${session_name}:0.0 -v -d
tmux split-window -t ${session_name}:0.0 -v -d
tmux split-window -t ${session_name}:0.0 -v -d
tmux split-window -t ${session_name}:0.0 -v -d
sleep 1
# closing extra terminal and even out vertical spacing
tmux send-keys C-c
tmux send-keys "exit" C-m
sleep 1
tmux select-layout -t ${session_name}:0 even-vertical
sleep 1
#this will split each of the four panes vertically, resulting in eight panes
for i in 0 2 4 6
do
tmux select-pane -t ${session_name}:0.$i
tmux split-window -t ${session_name}:0.$i -h
sleep 1
done
#this goes to each pane and sends a command
tmux select-pane -t ${session_name}:0.0
tmux send-keys -t ${session_name}:0.0 "ssh $(logname)@$1" C-m
tmux select-pane -t ${session_name}:0.1
tmux send-keys -t ${session_name}:0.1 "ssh $(logname)@$2" C-m
tmux select-pane -t ${session_name}:0.2
tmux send-keys -t ${session_name}:0.2 "ssh $(logname)@$3" C-m
tmux select-pane -t ${session_name}:0.3
tmux send-keys -t ${session_name}:0.3 "ssh $(logname)@$4" C-m
tmux select-pane -t ${session_name}:0.4
tmux send-keys -t ${session_name}:0.4 "ssh $(logname)@$5" C-m
tmux select-pane -t ${session_name}:0.5
tmux send-keys -t ${session_name}:0.5 "ssh $(logname)@$6" C-m
tmux select-pane -t ${session_name}:0.6
tmux send-keys -t ${session_name}:0.6 "ssh $(logname)@$7" C-m
tmux select-pane -t ${session_name}:0.7
tmux send-keys -t ${session_name}:0.7 "ssh $(logname)@$8" C-m
#tmux select-pane -t ${session_name}:0.8
# closing some panes that did not receive any useful ssh target
echo "${exits} exits"
while [ ${exits} -gt 0 ]
do
tmux send-keys C-c
tmux send-keys "exit" C-m
echo "send ${exits}"
exits=$(expr ${exits} - 1 )
done
sleep 1
# when below a certain ammount of panes we re-allign vertical spacing
case $forcelayout in
"t")
tmux select-layout -t ${session_name}:0 tiled
;;
"v")
tmux select-layout -t ${session_name}:0 even-vertical
;;
"h")
tmux select-layout -t ${session_name}:0 even-horizontal
;;
*)
if [ ${args} -lt ${reallignterms} ]
then
tmux select-layout -t ${session_name}:0 even-vertical
fi
;;
esac
# do the magic sync
tmux set-window-option -t ${session_name}:0 synchronize-panes on
# attach and list after tmux exit
tmux attach-session -t ${session_name}
tmux ls