У меня есть локальный компьютер, который должен сделать сеанс 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. Поэтому я попытался объединить первые две команды в
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
опцию, которая будет определять ваш прыжковый хост.