如何使用paramiko与一个ssh会话并行运行

时间:2016-04-11 03:25:08

标签: python python-2.7 ssh parallel-processing paramiko

Previous details
我需要在交换机上使用ssh来ping不同的主机。之前我为每个主机启动了一个线程,但结果很容易超过最大ssh连接数,所以我根据this创建了一个交互式shell会话。但是当我并行跑的时候,在发出第一个命令后它一直挂在那里。我不知道如何解决这个问题 下面列出的简化代码:

import paramiko
import time
from paramiko import SSHClient
from multiprocessing.dummy import Pool

def rping(src, user, passwd, dst):

    def command(des):
        chan.send('ping -s 64 -t 1500 %s\r\n' % des)
        time.sleep(3)
        resp = chan.recv(9999)
        print resp

    ssh = SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(src, 22, user, passwd, timeout=3)

    chan = ssh.invoke_shell()

    pool = Pool()
    pool.map(command, dst)
    pool.close()
    pool.join()


if __name__ == '__main__':
    print time.ctime()

    src = '10.130.1.121'
    user = 'user'
    passwd = 'password'
    dst = ['10.130.1.122', '10.130.1.123', 10.130.1.124'']
    rping(src, user, passwd, dst)

    print time.ctime()

0 个答案:

没有答案