gpt4 book ai didi

python - 使用 Paramiko 一次创建多个 SSH 连接

转载 作者:IT老高 更新时间:2023-10-28 21:09:13 27 4
gpt4 key购买 nike

下面的代码通过SSH在一台机器上运行grep并打印结果:

import sys, os, string
import paramiko

cmd = "grep -h 'king' /opt/data/horror_20100810*"

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.10.3.10', username='xy', password='xy')
stdin, stdout, stderr = ssh.exec_command(cmd)
stdin.write('xy\n')
stdin.flush()

print stdout.readlines()

我怎样才能一次 grep 五台机器(这样我不会有很大的延迟),而不是将所有这些放在五个变量中并全部打印出来。

最佳答案

您需要将调用放入单独的线程(或进程,但这将是多余的),这反过来又要求代码位于函数中(无论如何这是一个好主意:在模块的顶层)。

例如:

import sys, os, string, threading
import paramiko

cmd = "grep -h 'king' /opt/data/horror_20100810*"

outlock = threading.Lock()

def workon(host):

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username='xy', password='xy')
stdin, stdout, stderr = ssh.exec_command(cmd)
stdin.write('xy\n')
stdin.flush()

with outlock:
print stdout.readlines()

def main():
hosts = ['10.10.3.10', '10.10.4.12', '10.10.2.15', ] # etc
threads = []
for h in hosts:
t = threading.Thread(target=workon, args=(h,))
t.start()
threads.append(t)
for t in threads:
t.join()

main()

如果您的主机超过五台,我建议您改用“线程池”架构和工作单元队列。但是,只有五个,坚持“专用线程”模型更简单(特别是因为标准库中没有线程池,所以你需要一个第三方包,如 threadpool ......或者很多当然是你自己的微妙的自定义代码;-)。

关于python - 使用 Paramiko 一次创建多个 SSH 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com