ラベル tmux の投稿を表示しています。 すべての投稿を表示
ラベル tmux の投稿を表示しています。 すべての投稿を表示

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する先のサーバが全部同じパスワードでなければならない

2014年3月15日土曜日

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

前回、おんなじようなタイトルで起動時にsshできる方法をご紹介しました
今回はその第二弾となります

■スクリプト
#!/bin/sh
name="session_name"
password="Enter your password"
ip_list=(ip1 ip2 host1 host2)

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

for i in ${ip_list[@]}
do
  tmux new-window -t ${name} -n ${i}
  tmux send-keys -t ${i}.0 "ssh ${i}" C-m
  sleep 5
  tmux send-keys -t ${i}.0 "${password}" C-m
  echo "ssh ${i}"
done

■説明
  • 今回は1つ以上、tmuxセッションがない状態でも実行できるスクリプトです
  • name に作成するセッション名を設定します
  • password にsshをするホストのパスワードを設定します
  • ケースとして同一パスワードを設定している複数ホストを想定しているのでパスワードが異なる複数のサーバの場合は修正が必要になります
  • forループを使用して ip_list で指定したIPアドレスまたはホストに対してパスワードのsshログインを順番に実行していきます
  • sshログインをするホストごとに新しいタブを作成します
  • 異なるパスワードの複数ホストに対応する方法としては ip_list の他に password_list という配列を作成してforループの中でpassword_listの中からも順次値を取得する感じにするのがいいと思います

2014年3月14日金曜日

root権限がない場合にtmuxをインストールする方法

手順としては、まずtmuxのインストールに必要なパッケージをすべて自分のホームディレクトリ配下にソースインストールします
その上でtmuxをコンパイルするときにそれらを指定することでtmuxをインストールします

■環境
CentOS release 5.8 64bit
tmux 1.8

■手順
1. 事前準備
mkdir -p ~/bin/libevent
mkdir -p ~/bin/ncurses
mkdir -p ~/bin/tmux

2. libevent over 1.4.14 インストール
cd /var/tmp
wget https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz
tar zvxf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure --prefix=/home/kakakikikeke/bin/libevent
make
make install

3. ncursesインストール
cd /var/tmp
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz
tar xvzf ncurses-5.5.tar.gz
cd ncurses-5.5
./configure --prefix=/home/kakakikikeke/bin/ncurses
make
make install
cd ~/bin/ncurses/include/ncurses && cp * ../

4. tmuxインストール
cd /var/tmp
wget http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.8/tmux-1.8.tar.gz?r=http%3A%2F%2Ftmux.sourceforge.net%2F&ts=1379053410&use_mirror=jaist
tar xvzf tmux-1.8.tar.gz
cd tmux-1.8
./configure --prefix=/home/kakakikikeke/bin/tmux LDFLAGS="-L/home/kakakikikeke/bin/libevent/lib -L/home/kakakikikeke/bin/ncurses/lib/" CPPFLAGS="-I/home/kakakikikeke/bin/libevent/include -I/home/kakakikikeke/bin/ncurses/include"
make
make install

5. 起動確認
/home/kakakikikeke/bin/tmux/bin/tmux

で起動することを確認する
上記をPATHに追加したりPATHへの追加が無理ならばalias等に設定しておけばOK

■参考サイト

2013年9月26日木曜日

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

■コマンド
touch start_tmux.sh
vim start_tmux.sh
#!/bin/sh
name="mywindow"
tmux new-window -n ${name}

tmux split-window -v
tmux split-window -v -t ${name}.0
tmux split-window -v -t ${name}.1
tmux split-window -v -t ${name}.1

tmux select-layout even-vertical

tmux send-keys -t ${name}.0 'ssh host1' C-m
tmux send-keys -t ${name}.1 'ssh host2' C-m
tmux send-keys -t ${name}.2 'ssh host3' C-m
tmux send-keys -t ${name}.3 'ssh host4' C-m
tmux send-keys -t ${name}.4 'ssh host5' C-m

sleep 5

tmux send-keys -t ${name}.0 'password1' C-m
tmux send-keys -t ${name}.1 'password2' C-m
tmux send-keys -t ${name}.2 'password3' C-m
tmux send-keys -t ${name}.3 'password4' C-m
tmux send-keys -t ${name}.4 'password5' C-m

sleep 2

tmux send-keys -t ${name}.0 'hostname' C-m
tmux send-keys -t ${name}.1 'hostname' C-m
tmux send-keys -t ${name}.2 'hostname' C-m
tmux send-keys -t ${name}.3 'hostname' C-m
tmux send-keys -t ${name}.4 'hostname' C-m
tmux
Ctrl+b, d で一回デタッチする
sh start_tmux.sh

■説明
  • send-keysを使ってtmuxで作成したタブとペインに対してコマンドを送ります
  • 一回tmuxのセッションを作成してその後にtmuxのsend-keysを実行するシェルスクリプトを実行します
  • sshのコマンドを実行したあとに5秒スリープしてますが、すぐにsend-keysでパスワードを送ってしまうとうまく動作しないのでスリープを入れます
  • 他のコマンドを続けて実行する場合も時間がかかるコマンドを実行する場合はsleepを入れないとうまく動作しない時があります
  • サンプルのスクリプトはsshでログインしたあとにhostnameコマンドでホスト名を表示するだけですが、続けてsend-keysすることもできます
  • タブは1つ作成してその中で5つのペインに分割します
  • 横に分割ペインはそのあとに等間隔に整えます
  • C-mはEnterと同じ意味です

2013年9月17日火曜日

tmuxのインストール方法

■環境
CentOS 5.9
libevent 1.4.14
tmux 1.8

■インストール
1. libevent インストール
libevent の1.4.14が必要です
CentOS のbaseのyumレポには1.4.13しかないようです
しかたないので1.4.14の安定版ソースからインストールします
2系もあるのでそちらでも大丈夫かと思います
また、yum版を削除する作業を忘れずにやってください
yum版が残っているとtmuxのコンパイルとビルドでこけます
yum remove libevent-devel
cd /var/tmp
wget https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz
tar zvxf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure
make
make install

2. tmuxインストール
cd /var/tmp/
wget http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.8/tmux-1.8.tar.gz?r=http%3A%2F%2Ftmux.sourceforge.net%2F&ts=1379053410&use_mirror=jaist
tar zxvf tmux-1.8.tar.gz
cd tmux-1.8
./configure
make
make install

■操作
・tmux
   tmuxの起動
・tmux a
   既存のtmuxプロセスへのアタッチ
・tmux a -t [target_name]
   ターゲットを指定して既存のtmuxプロセスへのアタッチ
・tmux a -d
   既存のtmuxプロセスへの強制的にアタッチ
・Ctrl+b, c
   新規タブの作成
・Ctrl+b, n
   次のタブへ移動
・Ctrl+b, [num]
   指定した番号のタブへ移動
・Ctrl+b, %
   横にタブを分割(ペイン)
・Ctrl+b, "
   縦にタブを分割(ペイン)
・Ctrl+b, o
   次のペインへ移動
・ Ctrl+b, ;
   分割した最後のペインへ移動
・Ctrl+b, x
   タブ(ペイン)を削除
・Ctrl+d
   ログアウト
・Ctrl+b, ,
   タブ名の変更
・Ctrl+b, d
   tmuxのデタッチ
・Ctrl+b, ?
   使用できるキーバインドを表示
・Ctrl+b, w
   タブの一覧表示
・Ctrl+space
   分割したペインを均等にすることができる、1回で縦分割を均等に2回で横分割を均等にする
・Ctrl+t, [
   コピーモードの起動、ターミナル内を検索できるようになる(emacs操作で検索、コピペできる)、Ctrl+cでコピーモードを終了できる
・Ctrl+b, :
   tmux用のコマンドを受け付ける
・source-file ~/.tmux.conf
   起動中に再度設定ファイルを読み込む
・swap-window -t 0
   現在のタブと-tで指定したタブの位置を入れ替える
・move-window -t 1
   現在のタブを-tで指定タブに移動する、すでにタブがある場合は移動できない
・set-window-option synchronize-panes on
   分割したペイン間でキー入力を同期させる、タブ間では同期しない
・tmux rename-session -t 0 mySession
   セッション名を変更する
・tmux new-session -s test
   testという名前をsessionを作成する

■Tips
「tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory」
が出た場合は
touch /etc/ld.so.conf.d/libevent.conf
vim /etc/ld.so.conf.d/libevent.conf
/usr/local/lib/ を記載する

ldconfig
を実行したあとに再度tmuxをインストールする作業を実行してください

gccのインストールも必須です
yum -y install gcc

cursesのインストールも必須です
yum -y install ncurses-devel

■参考サイト