Mam maszynę lokalną, która ma wykonać sesję SSH na master
maszynie zdalnej , a następnie kolejną wewnętrzną sesję SSH z master
każdego do każdego zdalnego slaves
, a następnie wykonać 2 polecenia, tj. Usunąć konkretny katalog i odtworzyć go.
Zauważ, że lokalna maszyna ma SSH bez hasła do urządzenia master, a master ma bez hasła hasło do urządzenia slave. Również wszystkie nazwy hostów są znane .ssh/config
z maszyn lokalnych / głównych, a nazwy hostów niewolników znajdują się slaves.txt
lokalnie i stamtąd je czytam.
Więc to, co robię i pracuję, to:
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
Ten klaster znajduje się na Amazon EC2 i zauważyłem, że przy każdej iteracji powstaje 6 sesji SSH, co powoduje znaczne opóźnienie. Chciałbym połączyć te 3 polecenia w 1, aby uzyskać mniej połączeń SSH. Próbowałem więc połączyć pierwsze 2 polecenia
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""
Ale to nie działa zgodnie z oczekiwaniami. Wydaje się, że wykonuje pierwszą ( rm -rf Input Output Partition
), a następnie kończy sesję i kontynuuje. Co mogę zrobić?
-J
opcji, która zdefiniowałaby twojego hosta skoku.