如何为多个远程脚本执行维护单个ssh连接?

时间:2017-03-27 17:53:09

标签: python bash shell ssh scp

我在系统A中有一个包含数百万个文件的文件夹,我在同一个网络中有系统B.

计算机A ---> / home / nsadmin / Folder - 192.168.150.90

计算机B ---> /home/nsadmin/automate.sh - 192.168.150.91

假设在我的Folder目录中,所有百万个文件都被转储。我现在正在做的是

1 echo "Sending the files to Computer B"
2 scp -r /home/nsadmin/$folder_name nsadmin@192.168.150.91:/home/nsadmin/$folder_name
3 ssh nsadmin@192.168.150.91 "sh /home/nsadmin/$folder_name/automation.sh $folder_name"
4 rm -rf $folder_name/

从上面的脚本中我所做的是

  • 第1行 - >回声声明
  • 第2行 - >将文件夹的全部内容复制到计算机B
  • 第3行 - >远程执行以folder_name作为参数运行的脚本
  • 第4行 - >从计算机A中删除文件夹

这看起来非常糟糕。

那么我的想法是保持1个单ssh连接并将每个文件传递给仍然在连接的机器B ..

我会清楚地解释你

ssh to remote machine open
 --- subtask which should run in a loop till all the files in folder are done
 --- subtask is copying each file to remote machine and running the automate.sh script with argument as file_name not folder_name,(logic i will modify)
 --- After all the files are copyed done the loop
ssh to remote machine closed

我面对的逻辑问题:

  1. 所有要复制的文件都需要很长时间
  2. 无法估算所有要复制的文件的剩余时间
  3. 多个ssh连接
  4. 系统B中的空间问题
  5. 系统B更像是一个具有一定逻辑并且空间更小的工人。
  6. 使用此ssh连接很难实现自动化
  7. 有关如何解决这个问题的任何建议我解释了。如果有人不理解这些问题,请发表评论。

    我对小伪代码的要求:

    for i in $(find /home/nsadmin/Folder -type f);do
       scp -r /home/nsadmin/$i nsadmin@192.168.150.91:/home/nsadmin/$i
       ssh nsadmin@192.168.150.91 "sh /home/nsadmin/automation.sh $i"
    done
    

2 个答案:

答案 0 :(得分:2)

如果您需要持续运行这些自动化作业,我建议您使用celery。 Celery允许您创建任务队列并将其分发给工作人员。您甚至可以将任务安排在特定时间运行,如cron作业。如果需要,可以在不同的计算机上创建工作程序,但请注意,如果执行此操作,系统可能不具有分区容错能力。另一个在多台计算机上配置和安装软件的软件是ansible。您可以编写ansible playbook来配置和安装工作机器上的软件,以便他们准备开始工作。这样您就不必每次都手动设置它们。

答案 1 :(得分:0)

使用ControlMaster。它将为您将发出的所有命令/ scps仅打开单个TCP连接。在~/.ssh/config添加:

中进行设置非常简单
Host 192.168.150.91
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%C

然后只需运行您的伪代码而不进行任何修改,它将执行得更快(通过单个TCP连接)。