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()