Eu tenho uma máquina local que deveria fazer uma sessão SSH em uma master
máquina remota e, em seguida, outra sessão SSH interna de master
para cada um dos remotos slaves
, e depois executar 2 comandos, ou seja, para excluir um diretório específico e recriá-lo.
Observe que a máquina local possui SSH sem senha para o mestre e o mestre tem SSH sem senha para os escravos. Também todos os nomes de host são conhecidos nas .ssh/config
máquinas locais / master e os nomes de host dos escravos estão slaves.txt
localmente e eu os leio a partir daí.
Então, o que eu faço e funciona é o seguinte:
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 cluster está no Amazon EC2 e notei que existem 6 sessões SSH criadas a cada iteração, o que induz um atraso significativo. Gostaria de combinar esses 3 comandos em 1 para obter menos conexões SSH. Então, eu tentei combinar os 2 primeiros comandos em
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""
Mas não funciona como esperado. Parece executar o primeiro ( rm -rf Input Output Partition
) e depois sai da sessão e continua. O que eu posso fazer?
-J
opção que definiria seu host de salto.