Tengo una máquina local que se supone que debe hacer una sesión SSH en una master
máquina remota y luego otra sesión SSH interna desde master
cada uno de algunos remotos slaves
, y luego ejecutar 2 comandos, es decir, eliminar un directorio específico y recrearlo.
Tenga en cuenta que la máquina local tiene SSH sin contraseña para el maestro y el maestro tiene SSH sin contraseña para los esclavos. También todos los nombres de host son conocidos en .ssh/config
las máquinas locales / maestras y los nombres de host de los esclavos están slaves.txt
localmente y los leo desde allí.
Entonces, lo que hago y funciona es esto:
username="ubuntu"
masterHostname="myMaster"
while read line
do
#Remove previous folders and create new ones.
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition""
ssh -n $username@$masterHostname "ssh -t -t $username@$line "mkdir -p EC2_WORKSPACE/$project Input Output Partition""
#Update changed files...
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rsync --delete -avzh /EC2_NFS/$project/* EC2_WORKSPACE/$project""
done < slaves.txt
Este clúster está en Amazon EC2 y he notado que hay 6 sesiones SSH creadas en cada iteración, lo que induce un retraso significativo. Me gustaría combinar estos 3 comandos en 1 para obtener menos conexiones SSH. Así que intenté combinar los primeros 2 comandos en
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""
Pero no funciona como se esperaba. Parece ejecutar el primero ( rm -rf Input Output Partition
) y luego sale de la sesión y continúa. ¿Que puedo hacer?
-J
opción que definiría su host de salto.