Ich habe einen lokalen Computer, der eine SSH-Sitzung zu einem Remote- master
Computer und dann eine weitere innere SSH-Sitzung von master
jedem zu einem Remote- Computer durchführen und dann slaves
zwei Befehle ausführen soll, dh ein bestimmtes Verzeichnis löschen und neu erstellen.
Beachten Sie, dass der lokale Computer ein passwortloses SSH für den Master und der Master ein passwortloses SSH für die Slaves hat. Außerdem sind alle Hostnamen in .ssh/config
den lokalen / Master-Maschinen bekannt und die Hostnamen der Slaves sind slaves.txt
lokal und ich lese sie von dort.
Was ich also mache und arbeite, ist Folgendes:
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
Dieser Cluster befindet sich auf Amazon EC2, und ich habe festgestellt, dass bei jeder Iteration 6 SSH-Sitzungen erstellt werden, was zu einer erheblichen Verzögerung führt. Ich möchte diese 3 Befehle zu 1 kombinieren, um weniger SSH-Verbindungen zu erhalten. Also habe ich versucht, die ersten beiden Befehle zu kombinieren
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""
Aber es funktioniert nicht wie erwartet. Es scheint das erste ( rm -rf Input Output Partition
) auszuführen und verlässt dann die Sitzung und fährt fort. Was kann ich machen?
-J
Option verwenden, die Ihren Sprunghost definiert.