- Parallel SSHセッションを通じて複数のサーバーでコマンドを同時に実行できるCLIツール
- シンプルな使い方から高度な入出力制御まで対応しており、サーバークラスター管理に役立つ
基本機能
- 複数ホストでコマンドを実行し、ホスト名をプレフィックスとして出力
- 例:
pussh -h host1,host2 uname -a
- ホスト一覧はファイルまたは標準入力から提供可能
- 例:
pussh -f servers uname -a または fetch-servers | pussh -f - uname -a
- 出力をパイプラインに接続して並べ替えやフィルタリングが可能
- 例: ディスク使用量順にソート →
pussh -f servers df -h / | grep /dev | sort -rn -k5
- 各ホストごとの出力を個別ファイルに保存可能 (
%h はホスト名のプレースホルダー)
- 例:
pussh -f servers -o %h-hw.txt lshw
- SSH出力結果を別のコマンドにパイプ処理可能
- 例:
pussh -f servers -o '|grep feature' command > output
入力制御機能
- コマンド実行時の入力をファイルやコマンド出力から提供可能
- 例:
pussh -f servers -i file command
- 例: ホストごとの入力ファイル →
pussh -f servers -i %h.data command
- 例: 動的入力 →
pussh -f servers -i 'get-data %h|' command
-i と -o は自由に組み合わせ可能
配布と実行機能
- コマンドまたはスクリプトをリモートへ転送して実行可能
- 例:
pussh -f servers -u my-deploy.sh args ...
- ただし、実行ファイルはself-contained形式であるか、対象サーバー環境と互換性がある必要がある
パフォーマンス最適化のヒント
- SSH接続確立の速度が全体の実行時間に大きく影響する
- SSH agentの処理速度の限界を超えると、認証失敗や接続エラーが発生する可能性がある
- 推奨: 実行レート(rate)を設定して利用すること (例:
alias pussh='pussh -r 50')
- ネットワーク遅延の影響が大きいため、リモートLANマシンにsshでログインしてからそのマシン上でpusshを実行するとより高速
開発と歴史
- 2008年からBearstech社内で使われてきたツール
- 当初は数行のシェルスクリプトだったが、現在では500台以上のサーバークラスターでも安定して動作する
- クラウド管理システムと連携し、単純なホスト記述から実行可能なホスト一覧を生成する
制限事項
- リモートサーバーのstdoutとstderrは区別されず、1つのストリームに結合されて出力される
- リモートサーバーで実行されたコマンドの終了状態(exit status)は取得できない
2件のコメント
名前がよくない!
まったくその通りです 🤣