シェルスクリプト - 複数のSSH接続

シェルスクリプト - 複数のSSH接続

私のスクリプトに問題があります。スクリプトを実行すると機能します。ただし、単一のサーバーに接続されます。 「iplist.txt」は、最初のIPアドレスフィールドに接続されます。他のサーバーには接続されていません。何が間違っているのかわかりません。助けてください?

私は以前に質問した多くの質問を調査して適用しました。しかし、結果は同じです。

今後はこのスクリプトをさまざまな目的で使用したいと思います。私は140のLinuxサーバーを持っており、zabbixエージェントを持っています。しかし、サーバーのzabbixエージェントは古いです。

私のスクリプト

#!/bin/bash
#set -x

servers=/Users/spala/works/iplist.txt

#set -u

while read -u140 multiplessh;
do


USER="testuser"
PASS="testpassword"
PORT="55022"
current_ver="3.2.3"

command1="/usr/sbin/zabbix_agentd -V & hostname -f /dev/null"
connection_method=`/usr/local/bin/sshpass -p $PASS /usr/bin/ssh -n -p$port -o StrictHostKeyChecking=no $user@$multiplessh $command1`


first_step="$connection_method"

###
result=$(echo $first_step |grep 'zabbix_agentd\|.spala' | awk '{print $1, $5}')
# - 'zabbix_agentd' ---> "zabbix_agent -V" command output..
# - '.spala' my server hostname fqdn..--> test.spala test1.spala test2.spala

hostname=$(echo $result |awk '{print $1}')
version=$(echo $result |awk '{print $2}')


if [[ "$version" == "$current_ver" ]]
then
   echo "$hostname used version ---> $version"
   echo "Version is ok..."
   exit 1
else
   echo "$hostname used version ---> $version"
   echo "Old version.. Need update !"
   exit 1
fi
exit 0

done 140<"$servers"

スクリプト結果;

sh test.sh
test1.spala used version ---> 3.2.2
Old version.. Need update !

私のiplistファイル。

cat /Users/spala/works/iplist.txt
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
...
total 140 servers

答え1

スクリプトに行が表示されていますかexit 1exit 0明示的にスクリプトを停止します。このファイルをスタンドアロンファイルとして実行しようとすると、他の場所からコピーされた可能性がありますが、あなたの場合、これは最初のIPに接続した後にスクリプトが終了することを意味します。

もちろん、これは達成すべき目標ではありません。

  • 日常的な作業にはsshpassを使用しないでください。一度使用して鍵認証を設定する
  • PuppetやChefなどのシステム管理ツールの使用を検討してください。
  • 適切なパッケージの使用を考慮して、パッケージ管理ツールを使用してバージョンを確認できます。また、パッケージリポジトリを使用すると、アップグレード管理が簡単になります。

関連情報