i2csshで一括操作なはなし

記事タイトルとURLをコピーする

こんにちは。遅れてきた新人takadaです。

サーバーワークスにjoinしてから、macを仕事で使い始めまして、mac歴と社歴が同じ1ヶ月半です。
macを使ってても、必ずモテるわけではないという真理を実感中です。

さて、AWS上のEC2インスタンスのOSに対して、sshで接続して一括で何らかの作業を行いたい場面が
結構あります。(ないですか? いやあることにしましょう。
ChefやAnsibleなど構成管理ツールが導入済みの環境ですと、あまり悩む必要はないんでしょうが、
ちょっと一時的に5台〜10台くらいのEC2インスタンスに同じ作業を行いたいという時に、使えるツールを探してみました。

調べてみますと、csshXというツールがmac界隈だと一般的に使われているようです。
ただこれ、mac標準の「Terminal.app」をベースに動作するため、普段「iTerm2」を使っている人にとっては、
ちょっと不便かもしれません。
さらに調べてみますと、iTerm2」の操作感をそのままに、sshで一括操作できるツールがありました。
その名も 
i2cssh です。

このツールRubyで作られているので、gemでのインストールになります。

 

$ sudo gem install i2cssh


このコマンド、引数を渡したり、設定ファイルを作成することで、細かい設定を行うことができます。
今回は、実際に私が試した使い方をご紹介します。

私が実際に使うことになった条件は、このようなものでした。

  • 一括作業は一回きり
  • EC2インスタンスは、6台程度
  • 使用するssh秘密鍵は共通

まず、接続先ホストの一覧をテキストファイルで作成します。

接続先ホスト一覧のファイル(host.lst)

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
192.168.0.6


あとは、コマンドを実行するだけ。
sshの秘密鍵(private_key.pem)を"-Xi"オプションで、また、接続するユーザ名(ec2-user)を"-l"オプションで指定します。

最後に、接続先ホストを記載したファイル(host.lst)を"-f"オプションで指定します。

i2cssh -Xi=private_key.pem -l ec2-user -f host.lst

これで、指定した接続先にssh接続が行われ、下のように画面が分割されて表示されます。
気分はデイトレーラー。

 

接続直後は、右下の画面が選択されています。
これを一括操作するためには、以下のキーを押します。

⌘(command) + Shift + I(大文字アイ)

キー入力を行うと、確認のためのメッセージボックスが表示されますので、"OK"を押します。

 

すると、各画面の右上にアイコンが表示されますので、この状態で、キー入力すると、開いている画面すべてに同時に反映されます。

 

また、テキストファイルからコピーペーストも綺麗に反映してくれます。
(作業手順書などからのコピーに便利ですね。)

再度、個別に画面をしたい場合も、上記のキー操作で切り替えることができます。

ということで、今回はsshでの一括操作を行うi2csshをご紹介しました。
とても便利なツールですので、itermユーザの方は是非使ってみてください。

ちなみに、複数ターミナルでのコマンドの同時実行の機能は、tmuxのsynchronize-panesというオプションを使うことで実現できるようです。また、実行したいコマンドを渡して、同時にssh接続で実行してくれるParallelsshというツールもありますので、用途と環境にあわせて使っていくのが、よさげです。
 

参考にさせていただいたサイト

http://ikuwow.website/entry/i2cssh/