SSH a través de múltiples servidores y guarde la salida de múltiples comandos en un archivo en el servidor local

SSH a través de múltiples servidores y guarde la salida de múltiples comandos en un archivo en el servidor local

Quiero utilizar SSH en varios servidores (host 1, host2 y host 3) y guardar la salida de varios comandos (cmd1, cmd2, etc.) en un archivo (output.properties) en el servidor local. Sé que hay algunas publicaciones similares a esta, pero no estoy seguro de dónde me estoy equivocando. A continuación se muestra el fragmento de código.

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

¿Cuál es el error en el script anterior?

Respuesta1

En esta línea:

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

expry grepse ejecutará en el sistema local, no en el servidor SSH. Debes escapar de los $personajes para que se mantengan en el documento aquí y se envíen al servidor.

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

información relacionada