我有一台本地计算机,该计算机应该与远程master
计算机建立SSH会话,然后再从master
到每个远程计算机进行另一个内部SSH会话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
定义跳转主机的选项。