Previous details
Farklı anasistemlere ping yapmak için bir anahtarda ssh kullanmam gerekiyor. Daha önce her ana makine için bir iş parçacığı başlattım, ancak maksimum ssh bağlantı numarasını kolayca aşacak şekilde çıktı, böylece this'a göre etkileşimli bir kabuk oturumu oluşturdum. Ama paralel koştuğumda, ilk komutu gönderdikten sonra orada asılı duruyordu. Bunu nasıl düzelteceğimi bilmiyorum.
Basitleştirilmiş kod aşağıda listelenen:Paramiko kullanılarak bir ssh oturumunda paralel olarak nasıl çalıştırılır
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()
süreç hala asılı, ama ben 'o iyi çalıştı' for' döngü ile pool.map() 'fakat daha fazla zaman alıcı –
yerine olsam bunu ping argümanlar takas gibi görünüyor görmek ve aslında komut hiç bitmeyen. Düzeltmek için cevabı düzenleyin ve bir '-c 3 'ekleyin, böylece yalnızca 3 ICMP echo isteği gönderilir. – fernandezcuesta
Belirtilmemişse varsayılan paket sayısı 5'tir. Bu betik 'for' loop kullanarak seri olarak çalıştı, ancak başarısız oldu ve 'pool.map()' –