Ho una macchina locale che dovrebbe fare una sessione SSH su una master
macchina remota e poi un'altra sessione SSH interna da master
a ciascuno di alcuni telecomandi slaves
, e quindi eseguire 2 comandi cioè per eliminare una directory specifica e ricrearla.
Si noti che il computer locale ha SSH senza password per il master e il master ha SSH senza password per gli slave. Inoltre, tutti i nomi host sono noti nelle .ssh/config
macchine locali / master e i nomi host degli schiavi sono slaves.txt
localmente e li leggo da lì.
Quindi quello che faccio e lavoro è questo:
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
Questo cluster è su Amazon EC2 e ho notato che ci sono 6 sessioni SSH create ad ogni iterazione che inducono un ritardo significativo. Vorrei combinare questi 3 comandi in 1 per ottenere meno connessioni SSH. Quindi ho provato a combinare i primi 2 comandi in
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""
Ma non funziona come previsto. Sembra che esegua il primo ( rm -rf Input Output Partition
), quindi esce dalla sessione e continua. Cosa posso fare?
-J
opzione che definirebbe il tuo host di salto.