SSH über mehrere Server und Speichern der Ausgabe mehrerer Befehle in einer Datei auf dem lokalen Server

SSH über mehrere Server und Speichern der Ausgabe mehrerer Befehle in einer Datei auf dem lokalen Server

Ich möchte per SSH über mehrere Server (Host 1, Host 2 und Host 3) kommunizieren und die Ausgabe mehrerer Befehle (cmd1, cmd2 usw.) in einer Datei (output.properties) auf dem lokalen Server speichern. Ich weiß, dass es einige ähnliche Beiträge gibt, aber ich bin mir nicht sicher, was ich falsch mache. Unten ist der Codeausschnitt.

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

Was ist der Fehler im obigen Skript?

Antwort1

In dieser Zeile:

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

exprund grepwird auf dem lokalen System ausgeführt, nicht auf dem SSH-Server. Sie müssen die $Zeichen maskieren, damit sie im Here-Doc erhalten bleiben und an den Server gesendet werden.

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

verwandte Informationen