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

Python 如何为多个远程脚本执行维护单个ssh连接?,python,bash,shell,ssh,scp,Python,Bash,Shell,Ssh,Scp,我在系统a中有一个包含数百万个文件的文件夹,而系统B在同一个网络中 计算机A-->/home/nsadmin/Folder--192.168.150.90 计算机B-->/home/nsadmin/automation.sh--192.168.150.91 假设在我的文件夹目录中,所有的百万个文件都被转储了,我现在要做的就是 1 echo "Sending the files to Computer B" 2 scp -r /home/nsadmin/$folder_name nsadmin@1

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

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

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

假设在我的文件夹目录中,所有的百万个文件都被转储了,我现在要做的就是

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行-->Echo语句
  • 第2行-->将文件夹的全部内容复制到计算机B
  • 第3行-->远程执行以文件夹名称作为参数运行的脚本
  • 第4行-->从计算机中删除文件夹
这似乎是非常糟糕的编程

因此,我的想法是维护一个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
我面临的逻辑问题:

  • 复制所有文件所需的时间较长
  • 不估计所有文件复制的剩余时间
  • 多个ssh连接
  • 系统B中的空间问题
  • 系统B更像是一个有一定逻辑的工作者,它占用的空间更少
  • 这种ssh连接很难实现自动化
  • 有没有我解释过的关于如何解决这个问题的建议。?如果有人不理解这些问题,请发表评论

    我的小伪代码要求:

    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
    

    如果需要连续运行这些自动化作业,我建议使用。芹菜允许您创建任务队列并将其分发给工人。您甚至可以将任务安排在特定时间运行,就像cron作业一样。如果需要,您可以在不同的计算机上创建工作进程,但请注意,如果这样做,您的系统可能无法容忍分区。在多台机器上配置和安装软件的另一个软件是。您可以编写一个配置并在工作机器上安装软件,以便它们准备好开始工作。这样,您就不必每次都手动设置它们。

    使用
    ControlMaster
    。它将只为您将发出的所有命令/SCP打开单个TCP连接。在
    ~/.ssh/config
    添加中设置非常简单:

    Host 192.168.150.91
      ControlMaster auto
      ControlPath ~/.ssh/sockets/%C
    

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

    从a可以看出,脚本只使用2个ssh连接,这并不是很糟糕。不,实际上我想让它端到端,就像一次获取每个文件并发送到另一台机器做一些工作,然后将结果放入数据库。总体思路是将相同的文件发送到其他5个系统,以及执行并行操作。如果我将文件复制到机器
    B
    ,然后我需要再次复制到
    C
    D
    E
    要复制大量数据,我建议使用
    rsync
    。另外,不是让五台计算机可以远程访问。为什么不使用一台服务器并在每台计算机上提取数据呢?我有一台服务器,但我想将相同的文件并行发送到5台计算机中的每台,在1名工作人员完成其工作后,发送第二个文件,而不应等待其他计算机完成其工作。在这里不接受随机ping用户,他们可能曾经帮助过您。