2013-04-10 99 views
1

我不是一個完整的Python新手,但我是相當新的和缺乏經驗。我最近發現的paramiko時,我想編寫一個腳本來自動執行某些軟件包的版本檢查+與我們的生產環境相比,但每個連接需要一個很長的時間:(通過paramiko(SSH)連接到多個主機是非常慢

for app in apps: 
     tstapp_address = test_env['prefix'] + str(app['tstapp']) + test_env['suffix'] 
     ssh = paramiko.SSHClient() 
     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     ssh.connect(tstapp_address, username='our_username', password='secret') 
     sys.stdout.write('\n' + str(app_num) + ') ' + app['name'] + ' on ' + 'tstapp' + str(app['tstapp']) + '\n') 
     stdin, stdout, sderr = ssh.exec_command('rpm -q ' + app['name']) 
     tstapp_rpm = stdout.readline() 
     sys.stdout.write(str(tstapp_rpm)) 
     stdin, stdout, stderr = ssh.exec_command('exit') 
     app_num += 1 
     ssh.close() 

我有我之前檢索JSON文件所有這一切,它包含所有關於在哪裏連接等信息。問題是 - 每個連接需要大約10秒ssh到主機,rpm -q app-name,在屏幕上輸出並關閉連接如果你需要更多關於我在腳本中做什麼的信息,但我認爲這將是suf。夠的。

編輯:也想提一下,手動連接到這些主機真的很快,他們不是遙遠的遠程機器,也不是超級慢。它必須是我的代碼的東西...我只是沒有更多的想法。

+0

請,秀什麼時候'標準輸入,標準輸出,sderr = ssh.exec_command ('rpm -q'+ app ['name'])'和其他命令。 TIA。 – Evgenii 2013-04-10 04:34:13

回答

0

我發現'解決方案'...將pycrypto從2.6降級到2.4.1,並且還降低了公共ssh密鑰的位大小,大大提高了速度。

僅供參考,降級pycrypto使用:

sudo pip install -U https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.4.1.tar.gz 

降低關鍵應用的位大小:

ssh-keygen -t rsa -b 768 -C "[email protected]" 
+0

附加說明:從2.7.3升級python。到2.7.4。加快整個事情!讓我真的很高興:) – tsaulic 2013-04-15 02:50:09