複数のサーバーで同じコマンドを実行する方法

複数のサーバーで同じコマンドを実行する方法

クラスタとして機能する4つのSuseサーバーがあります。名前 CS-1 CS-2 CS-3 CS-4

CS-1では、CS-2 CS-3 CS-4に直接SSH経由で接続できます(ssh CS-2、ssh CS-3、SSH CS-4)。 CS-2では、CS-1 CS-に直接SSH経由で接続できます。 3 CS-4(ssh CS-1、SSH CS-3、SSH CS-4)

これら4つのサーバーすべてで3つのコマンドを実行する必要があります。

sed 's/aes128-ctr/aes129-ctr/' </etc/ssh/sshd_config> sshd_config.new; mv sshd_config.new sshd_config
sed 's/aes130-ctr/aes131-ctr/' </etc/ssh/sshd_config> sshd_config.new; mv sshd_config.new sshd_config
sed 's/aes132-ctr/aes133-ctr/' </etc/ssh/sshd_config> sshd_config.new; mv sshd_config.new sshd_config

シェルスクリプトでこれを行うにはどうすればよいですか?

ベストアンサー1

これを行う方法はいくつかあります。

これが定期的に実行できる作業である場合は、次のことを検討してください。アンシプールまたは他の同様の自動化ツール。

これが1回限りの場合、おそらく最も簡単な方法は、これらのコマンドをスクリプトにコピーし、スクリプトをscpリモートシステムにコピーしてから、次のようにリモートで実行することですssh

$ for host in cs-{2..4}; do scp my-script.sh myuser@"$host":; ssh -t $host "sudo ./my-script.sh"; done

ただし、コマンドに自分がいる場合は、sed手動で一時ファイルを作成して新しいファイルをコピーする代わりに、次のことを実行できます。

sed --in-place 's/aes128-ctr/aes129-ctr/;s/aes130-ctr/aes131-ctr/;s/aes132-ctr/aes133-ctr/' /etc/ssh/sshd_config

これはコマンドなので、各ホストに対して簡単に次のことができます。

$ ssh user@host "sed --in-place 's/aes128-ctr/aes129-ctr/;s/aes130-ctr/aes131-ctr/;s/aes132-ctr/aes133-ctr/' /etc/ssh/sshd_config"

おすすめ記事