मेरे पास एक स्थानीय मशीन है, जिसे किसी दूरस्थ master
मशीन को SSH सत्र बनाना है और फिर master
कुछ रिमोट में से प्रत्येक के लिए एक और आंतरिक SSH सत्र slaves
, और फिर एक विशिष्ट निर्देशिका को हटाने के लिए 2 कमांडों को निष्पादित करना है और इसे फिर से बनाना है।
ध्यान दें कि स्थानीय मशीन में मास्टर के पास पासवर्ड रहित एसएसएच है और दास के पास मास्टर के पास पासवर्ड रहित एसएसएच है। साथ ही सभी होस्टनाम .ssh/config
स्थानीय / मास्टर मशीनों के लिए जाने जाते हैं और दासों के होस्टनाम slaves.txt
स्थानीय स्तर पर हैं और मैं उन्हें वहां से पढ़ता हूं।
तो मैं क्या करता हूँ और काम करता है:
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
यह क्लस्टर Amazon EC2 पर है और मैंने देखा है कि प्रत्येक पुनरावृत्ति में 6 SSH सत्र बनाए गए हैं जो एक महत्वपूर्ण देरी को प्रेरित करता है। मैं कम SSH कनेक्शन प्राप्त करने के लिए इन 3 कमांडों को 1 में जोड़ना चाहता हूं। इसलिए मैंने पहले 2 कमांड को संयोजित करने का प्रयास किया
ssh -n $username@$masterHostname "ssh -t -t $username@$line "rm -rf Input Output Partition && mkdir -p EC2_WORKSPACE/$project Input Output Partition""
लेकिन यह उम्मीद के मुताबिक काम नहीं करता है। यह पहले एक ( rm -rf Input Output Partition
) को निष्पादित करने के लिए लगता है और फिर सत्र से बाहर निकलता है और आगे बढ़ता है। मैं क्या कर सकता हूँ?
-J
विकल्प का उपयोग कर सकते हैं जो आपके कूदने वाले मेजबान को परिभाषित करेगा।