クラスタとして機能する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"
答え2
一部のサーバーで同じコマンドを実行する必要がある場合よくpssh
、同じツールと関連ツールを見ることをお勧めします。パック。
〜50のリモートホストを制御する必要があるラップトップで行った操作(ssh設定はすでにキー認証を使用しています):
- ホスト名のリストを作成します。たとえば、
~/.dev-hosts.list
このリストにはホスト名のみがあります。
dev-host1 dev-host2 ...
date
リストの各ホストで次のコマンドを実行します。
pssh -h ~/.dev-hosts.list -l developer -i date
- 任意に選択できる:便宜上、すべてをエイリアスで囲みます
alias run.on.dev='pssh -h ~/.dev-hosts.list -l username'
。後でdate
これらのマシンで実行して出力を取得するには、いくつかのキーストロークが必要です。
run.on.dev -i date
明らかに、この方法であなたのケースを含むほぼすべてのコマンドを実行できますsed
。
これにより、-l
SSHを介してこれらのホストに接続するためのユーザー名を指定でき、-i
コマンドで生成された出力を表示できます。