csshxを使って複数サーバに同じコマンドを送る
色々あって複数のサーバの管理をしているので、アップデート(例えはsudo apt update
とか)作業などはまとめてやりたい。幸いにも私が管理しているサーバば全部Ubuntuに統一しているので、ほとんどの場合は使用するコマンドは同じ。今まではターミナルをたくさん立ち上げて一つずつ手作業でやっていたが、サーバの数が4台を超えたあたりでもう少し効率化をしたくなった。
何かいい方法がないかと調べていて、csshX
というのがあるのを知った。他にも似たようなものでpssh
やmpssh
というのがあるらしいが、完全に同じコマンドしかできないので、特にsudo
のパスワードが違っていたりすると面倒な気がする。
Macで使う場合はHomebrewでインストールできる。
$ brew install csshX
あとは、使うサーバを列挙してsshでログインすると適当にタイルした端末をたくさん立ち上げてくれる。
$ csshX server1 server2 server3 server4
事前に~/.ssh/config
で色々と設定しておくと楽だが、例えばパスワードがサーバによって違う場合はそれぞれの端末でパスワードを打てば良い。
ところで、このcsshX
がMacのBigSurではバグがあるらしく動かなかった。
$ csshX server1 server2 server3 server4
Unimplemented: POSIX::tmpnam(): use File::Temp instead at /System/Library/Perl/5.30/darwin-thread-multi-2level/POSIX.pm line 185.
Unimplemented: POSIX::tmpnam() at /usr/local/bin/csshX line 1130.
BEGIN failed--compilation aborted at /usr/local/bin/csshX line 1130.
https://stackoverflow.com/questions/64837097/cant-make-csshx-working-on-mac-os-big-sur
に解決策が書いてあった。というか、エラーメッセージそのものだけど、/usr/local/bin/csshX
実体は/usr/local/Cellar/csshx/0.74/bin/csshX
の1130行目を指示通り書き換えれば良い。ちなみにこのファイルは書き込み禁止になっているので、chmod -w /usr/local/Cellar/csshx/0.74/bin/csshX
としないと書き換えられない。
#==============================================================================#
package CsshX::Launcher;
use base qw(CsshX::Socket::Selectable);
# use POSIX qw(tmpnam);
use File::Temp qw(tmpnam);
Use FindBin qw($Bin $Script);;
これで動いた。
Author And Source
この問題について(csshxを使って複数サーバに同じコマンドを送る), 我々は、より多くの情報をここで見つけました https://qiita.com/niikura/items/da93f39d307735ca3fa0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .