script.shというスクリプトがあります。私はそれをホスト1、ホスト2などの他のコンピュータで実行したいと思います。ユーザー名とパスワードを渡して各サーバーをどのように繰り返すことができますか?
答え1
キーなしで複数のサーバーを繰り返すには、プレーンテキストまたは単純に暗号化されたパスワードを含むファイルを繰り返す必要があります。特に本番環境では、この作業を直接行わないことをお勧めします。
警告 - 推奨しません
sshpass
サーバーのホスト名とパスワードを含むテキストファイルを使用すると、迅速で複雑なソリューションを得ることができます。
serverList.txt 例:
server1 password1
server2 password2
本物安全でないスクリプトの例:
for host in $(awk '{print $1}' serverList.txt); do
password=$(grep -w "$host" serverList.txt | awk '{print $2}')
sshpass -p "$password" ssh $host < ./script.sh
done
これが私が提案するものです:
これが定期的に実行する必要がある場合はdsh
(分散シェル)を見てください。
インストールする
Debian/Ubuntu からインストールするのは簡単です:
sudo apt-get install dsh
RHELベースのディストリビューションの場合は、libdshconfig
まずコンパイルしてから次のことを行う必要がありますdsh
。
# libdshconfig
wget http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.10.cvs.1.tar.gz
tar xfz libdshconfig*.tar.gz
cd libdshconfig-*
./configure ; make
make install
# dsh
wget http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.22.0.tar.gz
tar xfz dsh-0.22.0.tar.gz
cd dsh-*
./configure ; make
make install
構成
dsh
デフォルトでは、設定はrsh
ログインプロトコルとして使用されます。これを暗号化されていないssh
に変更することもできますrsh
。
経由でインストールした場合、設定apt
ファイルは次のようになります/etc/dsh/dsh.conf
。 - RHELベースの展開用にコンパイルする必要がある場合、構成ファイルは次のようになります。/usr/local/etc/dsh.conf
これを更新してください:
remoteshell =rsh
これに関して:
remoteshell =ssh
これを完了したら、プログラムを実行するコンピュータのリストが必要です。 Debian の場合はファイルは で/etc/dsh/machines.list
、RHEL の場合はファイルは次のようになります。/usr/local/etc/dsh/machines.list
リストは、改行で区切られたホスト名、IP、またはFQDNの形式にすることができます。たとえば、machines.list
すべてのホスト名またはFQDNが解決された場合、以下は有効なファイルです。
10.20.30.40
10.20.30.31
server1.stackexchange.com
server2
root@myOtherServer
はい
これで、複数のホストでコマンドを順次実行または並列実行できます。machines.list
次に、出力のみが返されます。
dsh -a <command>
$ dsh -a echo hello
hello
hello
各ホスト名をその出力のプレフィックスとして印刷します。
dsh -a -M <command>
$ dsh -a -M echo hello
root@server1: hello
root@server2: hello
同じことを行いますが、順番に実行するのではなく、コマンドを同時に実行してください。
dsh -aMc <command>
選択したホストのみを使用:
dsh -Mc -m <host1> -m <host2> <command>
ガイドライン
したがって、あなたのシナリオで問題は、SSHキーを設定する必要があり(各ホストにパスワードを入力する必要がない場合)、各ホストにスクリプトが必要であることです。
個人的には、これはスクリプトのサイズに応じて実行するための最良かつ最も安全な方法だと思います。 SSHを介して各ホストにスクリプトを渡す必要がないため、すべてローカルでスクリプトを実行できます。
答え2
答え3
使い方は非常に簡単ssh
で、ほとんどのシステム管理者が常に使用しています。この例では、3つのリモートホストと1つのアクティブホストがあるとします。アクティブ項目はhost1
、残りは、およびと呼ばhost2
れhost3
ますhost4
。そして、ユーザー名はすべてのホストで同じですuser1
。
SSH鍵ペアの生成(シェルに戻るまでEnterキーを押すだけです):
user1@host1$ ssh-keygen -t rsa
公開鍵の配布host2
、およびhost3
:host4
user1@host1$ for i in {2..4}; do ssh-copy-id user1@host$i;done
user1@host2 password:
user1@host3 password:
user1@host4 password:
スクリプトを通過からhost1
:
user1@host1$ for i in {2..4}; do scp script.sh user1@host$i:/home/user1 ;done
スクリプトの実行からhost1
:
user1@host1$ for i in {2..4}; do ssh user1@host$i 'sh script.sh'; done