さまざまなユーザーのための複数のSSHセッション

さまざまなユーザーのための複数のSSHセッション

私は3人の異なるユーザーを使用して複数のサーバーに接続するスクリプトを作成しています。

#!/bin/ksh

server1=("abc1" "abc2")
server2=("abc3" "abc4")
server3=("abc5" "abc6")

for i in "${server1[@]}"
do ssh sam@$i "some command"
done

for i in "${server2[@]}"
do ssh danny@$i "some command"
done

for i in "${server3[@]}"
do ssh robert@$i "some command"
done

for3つのループをすべて1つにまとめる方法はありますか?実際、私は複数の接続のためにSSHを書きたいと思います。

すべてのサーバーを1つの配列に配置し、ユーザーを別の配列に配置してみました。

servers=("abc1" "abc2" "abc3" "abc4" "abc5" "abc6")

users=("sam" "Danny" "Robert")

for i in ${servers[@]}
do
 ssh ${users[@]}@$i "some command"
done

ただし、これによりスクリプトはすべてのユーザーをすべてのサーバーに配置し、最終的にサービスアカウントをロックします。

Sam私が望むのは、すべてのサーバーとユーザーを繰り返し、ユーザーと配列、ユーザーserver1danny配列server2 、ユーザーrobert と配列のみを一致させるスクリプトですserver3 。きれいでより良い方法で正しいユーザーを正しいサーバーに接続するより良い方法はありますか?

ベストアンサー1

Bashを仮定すると、タグが示すように(shebangで言うkshではない)、次のものを使用できます。名前参照指定された整数識別子に対応する配列変数を使用します。

users=(. userxyz user123 user221)
for n in 1 2 3
do
    declare -n server=server$n
    for i in "${server[@]}"
    do ssh "${users[$n]}@$i" "some command"
    done
done

適切なを使用すると、echo元のスクリプトと同じ出力を取得できます。

ssh userxyz@abc1 some command
ssh userxyz@abc2 some command
ssh user123@abc3 some command
ssh user123@abc4 some command
ssh user221@abc5 some command
ssh user221@abc6 some command

Korn シェルに適応するには、次のものが必要です。nameref組み込みコマンドの使用変えるdeclare -n


より簡単なアプローチでは、ユーザー名/ホスト名を一緒に検討できます。

servers=("userxyz@abc1" "userxyz@abc2"
         "user123@abc3" "user123@abc4"
         "user221@abc5" "user221@abc6")

for i in "${servers[@]}"
do ssh "$i" "some command"
done

おすすめ記事