psshというものがあることを偶然知りました。
要するにSSHコマンドの並列実行ができるコマンドなんだそうです。使い方は上記URLに任せることとして、早速使ってみることにしました。
今回インストールにはUbuntu Server 16.04.1を使いました。
Ubuntuにはpsshパッケージが用意されているので、インストールは簡単でsudo apt install pssh
を実行するだけです。リポジトリーの更新コマンドのsudo apt update
も忘れずに。
ubuntu@xenial1:~$ sudo apt install pssh
先ほどのページではpsshコマンドを使っていますが、Ubuntuではparallel-ssh
というコマンドになっています。psshコマンドで制御したければコマンドエイリアスを各自張ってください。
あとはparallel-sshコマンドでリモートサーバーをあれこれするだけなのですが、動かすにはいくつか条件があるようです。
- 名前解決が必要
手っ取り早くするには/etc/hostsで処理する
(例)
ubuntu@xenial1:~$ sudo vi /etc/hosts 192.168.0.101 xenial1 #操作用(は別に書かなくてもよし) 192.168.0.102 xenial2 #リモートアクセス対象 192.168.0.103 xenial3 #リモートアクセス対象
- 対象のサーバーのホスト名を書いた「hostsファイル」が必要
(例)
ubuntu@xenial1:~$ sudo vi thosts xenial2 xenial3
- パスワードをコマンドに含めるか、公開鍵認証で対象ノードにリモートアクセスできるようにする
(例)
- ユーザーを作る
ubuntu@xenial2:~$ sudo adduser ytooyama ubuntu@xenial3:~$ sudo adduser ytooyama
- キーペアを作る
ubuntu@xenial1:~$ ssh-keygen -t ecdsa -b 256
- 公開鍵を転送
ubuntu@xenial1:~$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub ytooyama@xenial2 ubuntu@xenial1:~$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub ytooyama@xenial3
あとは操作用のマシンからparallel-sshコマンドで操作するだけです。
$ parallel-ssh -l ytooyama -h thosts -i uptime #全てのサーバーでuptimeを実行して結果を出力 $ parallel-ssh -l ytooyama -h thosts -i ping -c3 virtualtech.jp #全てのサーバーでpingを(ry
あれ?ちょっと待って・・・それってAnsibleでもできるんじゃ?と思った方、 はい、その通りでございますw
ただ、実際使ってみると「割と良いかも」と思いました。