2013-04-10 66 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