次のテキストがあります。
node1: connect command: ssh [email protected] password: qcipunbnctza
node2: connect command: ssh [email protected] password: ejrpnnwsczpa
node3: connect command: ssh [email protected] password: pkrpxmyxnxuu
IPアドレスとパスワードを変数に保存し、それをスクリプトに渡す必要があります。これをどのように効率的に実行できますか?私のスクリプトは次のとおりです
#/bin/bash
declare -a IPS=($1 $2 $3)
CONFIG_FILE=inventory/sks-cluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
echo $4 > host1.txt
echo $5 > host2.txt
echo $6 > host3.txt
ssh-keyscan $1
ssh-keyscan $2
ssh-keyscan $3
sshpass -f host1.txt ssh-copy-id user@$1
sshpass -f host2.txt ssh-copy-id user@$2
sshpass -f host3.txt ssh-copy-id user@$3
答え1
次のようにしてみてください。
#!/bin/bash
export SSHPASS
awk -F'[@ ]' '{print $5, $6, $8}' hostlist.txt |
while read -r username host SSHPASS ; do
echo ssh-keyscan "$host"
echo sshpass -e ssh-copy-id "$username@$host"
done
これは、awk 1行を使用して、名前付きファイルから各行のユーザー名、ホスト名/ IPアドレス、およびパスワードを抽出し、出力をhostlist.txt
ループwhile
にパイプします。
ループwhile
は各入力行の出力を処理し、それとawk
一緒に使用します(ファイルの代わりに環境変数が使用されるように代わりにオプションを使用します)。ssh-keyscan
sshpass
-e
-f
$SSHPASS
SSHPASS
sshpass
実行時に環境で使用できるようにエクスポートされます。
echo
注:以前にこれを使用したことssh-keyscan
があり、sshpass
テストを実行してみました。 (そして、私のシステムがssh-keyscanとssh-pass + sshを使用してこれらのIPアドレスに接続しようとする時間を無駄にする必要がない場合は、テストが速くなるためです。レプリカID)。echo
期待どおりに機能すると確信している場合は、2行を削除してください。
答え2
これは非常に素朴なアプローチです。
スクリプトが呼び出され、yourscript.sh
データnodes.txt
yourscript.sh $(cat nodes.txt | tr '@' ' ' | cut -f6 -d' '; cut -f7 -d' ' nodes.txt)