複数サーバで同時操作したい時の方法まとめ

投稿者: | 2015/11/11

今日も飽きずに過去のメモを掘り起こして記事にしました


全台、もしくは一部のサーバに対して一斉にコマンド実行したい場合があります。
調べてみると色々な方法があるみたいなので、いくつか紹介します。
他にあれば随時追加するかも。

tmux

ローカルPCにtmuxをインストールし、~/.tmux.conf に以下の設定を追加します。

同じWindowに複数paneを開いてそれぞれ複数サーバにSSHログインし、<bind>+eすると、paneで操作を同期することができます。
<bind>+Eで同期が終了します。

メリット

  • SSHのパスフレーズやsudoのパスワードなどを考えなくて済む(自分で入力するため)
  • いつも自分がやっている作業をそのままできる、余計なコマンドを覚えなくても済む

デメリット

  • 複数panelを立ち上げてそれぞれサーバにログインするのが面倒
  • panel同期後、コマンド補完ができなかったりするため、予め実行するコマンドをまとめておいて、コピペして実行した方が良い

参考URL

pdsh(Parallel Distributed Shell)

https://code.google.com/p/pdsh/

インストール

基本的な使い方

sudo を使う場合そのままでは渡せないので、次のように強制的にttyを飛ばすようにします。

sudo権限で/rootをlsコマンドで見るようにしてみました。$HOME/.ssh/PASSからsudoパスワードを読み込むことでヒストリに残さないようにしています。dshbakコマンドを使うことで出力を見やすくできるのでよく使っています。

メリット

  • ホスト指定が正規表現で指定ができる

デメリット

  • パスフレーズ付き秘密鍵だと実行できない

pssh(pararell-ssh)

https://code.google.com/p/parallel-ssh/

インストール

使い方

複数ホストを実行したい場合は、--host(-H)オプションを複数付けてもできるが、ホスト一覧のファイルを用意して-hオプションで指定した方が楽です。

しかし、パスフレーズ付きの秘密鍵の場合、パスワードの入力が求められます。
解決するには、苦し紛れですがソースを改変します。

--askオプションを付けるとパスワードを聞かれるのでそれに返すとコマンドを実行できます。
Stderrが出ていて気持ち悪いが気にしないことにします。

sudoを使う場合は -x 'tt' で強制的にttyを飛ばすようにすれば良いです。

メリット

  • (ソース改変が必要だが)--askオプションでパスフレーズ付きの秘密鍵でも実行できる

デメリット

  • Stderrが出てくるので気持ち悪い

最後に

ここまで書いてふと思ったのがAnsibleでもできるかなと思いました。
良い方法があれば教えてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*