通过paramiko(SSH)连接到多个主机非常慢

时间:2013-04-10 03:50:17

标签: python paramiko

我不是蟒蛇的完全新手,但我相当新,缺乏经验。我最近发现了paramiko,当我想编写一个脚本来自动化一些包版本检查+与我们的生产环境进行比较时,但是每个连接需要很长时间:(

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,在屏幕上输出并在连接到下一个主机之前关闭连接。这是python + paramiko的常规行为吗? :/

如果您需要有关我在剧本中所做的更多信息,请告诉我,但我认为这就足够了。

编辑:还想提一下,手动连接到这些主机真的很快,它们不是遥远的远程机器也不是超慢。它必须与我的代码有关......我只是没有更多的想法。

1 个答案:

答案 0 :(得分:0)

我找到了'解决方案'...从2.6降级pycrypto到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@example.com"