概要
OpenSSH の並列同時実行を行うクライアント gopssh を作りました
https://github.com/masahide/gopssh
動機
xargsで十分だったり、すでに同じようなOSSが存在するのになぜ作ったか
- 指定したホスト順に実行結果が出力されないものが多い
- 実行ホスト名を表示したい
- 並列実行性能がもっと欲しい
などなどオレオレ仕様を満たすために作りました
特徴
- 指定したホストの順で実行結果を出力するモードがデフォルト
- 実行ホスト名を表示するオプション(-d)
- ssh key-agentによる認証がデフォルト(-iで秘密鍵の指定も可能)
- ホストキーチェックを無視するオプション(-k)がある(デフォルトは Opensshの ~/.ssh/known_hostsのホストを許可)
- sshコマンドやライブラリを必要としないone binary
- 同時並列実行数がデフォルトでは無制限(ulimit open file数を超えるような場合はulimitを要調整)
- 標準入力を使える(ファイルやスクリプトなどを入力として渡すと各ホストに同じものを実行/配布することができる)
- ホスト名や終了コード/エラー出力をANSIカラーで表示
- 各種インストールパッケージを用意しているのでインストールが簡単
- パスワード認証は未実装!
- cipher, key exchanges, MACのアルゴリズムはそれぞれデフォルトで速度優先でsort済み(変更可能)
環境や前提条件
以下の64bit環境用のパッケージを用意しています
- RHEL/CentoOS
- Ubuntu/Debian
- MacOS
使いかた
簡単な使い方
gopssh <オプション> <コマンド...>
- オプション
-
-d
ホスト名を表示 -
-h <ファイル名>
ホスト一覧ファイルを指定
-
その他のオプションはこちら
例)host1,host2 に対して ls -la /etc/
を実行する場合
この例ではbashプロセス置換を使って一覧ファイルを省略している
gopssh -d -h <(echo host1 host2) ls -la /etc/
ホストファイルを準備する例
<ホスト名>[:ポート番号]
を改行か空白区切りで記載する
例)
hostfile
host1
host2:1022
host3
.
.
-k
オプション: ホストキーチェックを無視する
gopssh -d -k -h ./hostfile ls -la /etc/
ディレクトリをコピーする例
標準入力に対応しているので以下のような操作で、ディレクトリをtarアーカイブして宛先の各ホスト側でtar展開することができる
/tmp/hoge
ディレクトリを各ホストに配布
tar -cz -C /tmp/ hoge| gopssh -d -h <(host1 host2 host3) -k tar xz -C /tmp/
インストール方法
RHEL/CentOS
sudo yum install https://github.com/masahide/gopssh/releases/download/v0.5.4/gopssh_amd64.rpm
Ubuntu/Debian
wget -qO /tmp/gopssh_amd64.deb https://github.com/masahide/gopssh/releases/download/v0.5.4/gopssh_amd64.deb
sudo dpkg -i /tmp/gopssh_amd64.deb
macOS
brew tap masahide/gopssh https://github.com/masahide/gopssh
brew install gopssh