LoginSignup
3
1

More than 5 years have passed since last update.

Goで並列ssh実行コマンド gopssh を作った

Last updated at Posted at 2018-12-16

概要

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
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1