テキストの値を変数に代入するには?

テキストの値を変数に代入するには?

次のテキストがあります。

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-keyscansshpass-e-f$SSHPASS

SSHPASSsshpass実行時に環境で使用できるようにエクスポートされます。

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)

関連情報