У мене локальна машина, яка повинна зробити сеанс SSH на віддаленій master
машині, а потім ще один внутрішній сеанс SSH від master
кожного до якогось віддаленого slaves
, а потім виконати 2 команди, тобто видалити певний каталог і відтворити його.
Зауважте, що локальна машина має безвізну SSH для ведучого, а майстер має безвільний SSH для рабів. Також всі імена хостів відомі в .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, що викликає значну затримку. Я хотів би об'єднати ці 3 команди в 1, щоб отримати менше з'єднань SSH. Тому я спробував поєднати перші 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
опцію, яка б визначала вашого хоста стрибка.