ファイルを使用するSSHスクリプト

ファイルを使用するSSHスクリプト

私のシステムにリモートでアクセスするには、次のスクリプトを使用しました。

#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
    ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done

HOSTS作成=面倒になる

テキストファイルからホストを読みたいです。このスクリプトが機能するようにするにはどうすればよいですか?

ありがとうございます。

ベストアンサー1

修正はとても簡単です。 1行に1つのホスト名を持つファイルがあると仮定すると、必要なものは次のとおりです。

#!/bin/bash
username=someUser
script="pwd; ls"
while read -r hostname; do
    ssh -n -l "$username" "$hostname" "$script"
done < "$1"

次に、そのファイルを引数として使用してスクリプトを実行します。

script.sh /path/to/hosts/file

変数を小文字に変更しました。シェル変数に大文字を使用するのは一般的に悪い考えです。通常、グローバル環境変数は大文字であるため、名前の競合が予期しない動作を引き起こす可能性があるためです。これは通常、環境ですでに定義されているHOSTNAME標準変数名(たとえば、および)を使用する場合に特に重要です。USERNAME

また、ファイルの残りの部分を読み取る試みをブロックする-nには、ここにオプションが必要です。sshそれ以外の場合、コマンドは標準入力の残りの部分を消費してファイル全体を読み取るため、-n最初の反復のみが機能します。ssh

おすすめ記事