複数のサーバーにSSH接続し、複数のコマンドの出力をローカルサーバーのファイルに保存します。

複数のサーバーにSSH接続し、複数のコマンドの出力をローカルサーバーのファイルに保存します。

複数のサーバー (ホスト 1、ホスト 2、ホスト 3) に SSH 接続し、複数のコマンド (cmd1、cmd2 など) の出力をローカル サーバーのファイル (output.properties) に保存したいと考えています。これに似た投稿がいくつかあることは知っていますが、どこが間違っているのかわかりません。以下はコード スニペットです。

folderPath="cd /usr/local/apps/tempdir";
echo $folderPath;
eval $folderPath;

# host 1
echo RepCard1=$(expr $(grep -r "sample text" * | wc -l) / 2) >> /usr/local/host1/tempdir/output.properties;

# Server 2

ssh -T user@host2 <<EOF >>/usr/local/host1/tempdir/output.properties;
#alias GetDuplicateCardStats="cd /usr/local/apps/tempdir"
folderPath="cd /usr/local/apps/tempdir";
echo $folderPath;
eval $folderPath;

echo RepCard2=$(expr $(grep -r "sample text" * | wc -l) / 2);
exit
EOF

. /usr/local/host1/tempdir/output.properties;

echo "host 1"
echo $RepCard1

echo "host 2"
echo $RepCard2
# RepCard2 is always executed on Host 1 and print value from host 1

上記のスクリプトの間違いは何ですか?

答え1

この行では:

echo RepCard2=$(expr $(grep -r "sample text" * | wc -l) / 2);

exprgrepSSH サーバーではなく、ローカル システムで実行されます。文字をエスケープして、ヒア ドキュメントに保持し、サーバーに送信する必要があります$

echo RepCard2=\$(expr \$(grep -r "sample text" * | wc -l) / 2);

関連情報