こんにちは。遅れてきた新人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というツールもありますので、用途と環境にあわせて使っていくのが、よさげです。
参考にさせていただいたサイト