2015年1月26日月曜日

tmux起動時にsshで自動でログインしログイン後にコマンドを実行する方法 その3

概要

その1
その2

ついにその3まで来ました
相変わらずシェルですが今回はサーバのロールごとにwindowを開いてくれるように改修しました

環境

  • CentOS 6.4 64bit Final
  • Bash 4.1.2
  • tmux 1.9a

スクリプト

コード

#!/bin/sh

#-- Configuration --#
name="session_name"
password="Please input your server's ssh password"
# key="/path/to/key.pem"

pane_define=(app db bat)
app=(apl001)
db=(db001 db002)
bat=(bat001)
#-- Configuration --#

tmux new-session -s ${name} -d

for j in ${pane_define[@]}
do
  pane_name=${j}
  eval ref="\${${pane_name}[@]}"
  eval ref_count="\${#${pane_name}[@]}"
  tmux new-window -t ${name} -n ${pane_name}
  count=0
  for i in ${ref}
  do
    echo "ssh ${i}"
    # tmux send-keys -t ${pane_name}.${count} "ssh -i ${key} ${i}" C-m
    tmux send-keys -t ${pane_name}.${count} "ssh ${i}" C-m
    sleep 5
    tmux send-keys -t ${pane_name}.${count} "${password}" C-m
    last_count=`expr ${count} + 1`
    if [ ${last_count} -ne ${ref_count} ]
    then
      tmux split-window
    fi
    (( count++ ))
  done
  tmux select-layout even-vertical
done

設定と動き

  • pane_defineに作成したいwindows名を作成したいだけ書きます
  • 記載したwindows名と同じ名称で配列を作成し、その配列にSSHするサーバ先を記載します
  • 配列1つごとに1つのwindowが作成されて、サーバの分だけwindowsが分割されます
  • 最後は平行に均等に並べ替えて完了です
  • 公開鍵認証の場合はkeyのコメントを外してください
  • nameには好きなセッション名を定義してOKです

イケてない点

  • パスワードを1つしか設定しないので、SSHする先のサーバが全部同じパスワードでなければならない

0 件のコメント:

コメントを投稿