为什么Fabric将近2分钟显示与服务器消息的断开连接?

时间:2010-04-21 19:01:59

标签: python ssh virtualenv fabric paramiko

每当我发出fab命令时,

Fabric显示Disconnecting from username@server... done.将近2分钟,然后显示新的命令提示符。

使用发布到内部服务器和Rackspace云服务器的Fabric命令时存在此问题。下面我已经包含了来自服务器的auth.log,我在MacBook上的日志中没有看到任何内容。

关于问题是什么的任何想法?

服务器的SSH auth.log,带有LogLevel VERBOSE

Apr 21 13:30:52 qsandbox01 sshd[19503]: Accepted password for mrankin from 10.10.100.106 port 52854 ssh2
Apr 21 13:30:52 qsandbox01 sshd[19503]: pam_unix(sshd:session): session opened for user mrankin by (uid=0)
Apr 21 13:30:52 qsandbox01 sudo:  mrankin : TTY=unknown ; PWD=/home/mrankin ; USER=root ; COMMAND=/bin/bash -l -c apache2ctl graceful
Apr 21 13:30:53 qsandbox01 sshd[19503]: pam_unix(sshd:session): session closed for user mrankin

服务器配置

  • 操作系统:Ubuntu 9.10和Ubuntu 6.10(使用这些操作系统测试了4台服务器)
  • OpenSSH:Ubuntu软件包版本1.5.1p1-6ubuntu2

客户端配置

  • 操作系统:Mac OS X 10.6.3
  • Fabric ver 0.9
  • Vritualenv ver 1.4.7
  • pip ver 0.7

简单的fabfile.py用于测试

即使我使用以下fabfile运行fab -H server_ip host_type,问题仍然存在。

from fabric.api import run

def host_type():
    run('uname -s')

关于问题原因的思考

我不确定这个问题持续了多长时间,但是自从我开始注意到使用Fabric后服务器断开连接以来,有些事情发生了变化。

  1. 我使用virtualenv 1.4.7,virtualenvwrapper 2.1和pip 0.7重新创建了我的virtualenv。不确定这是否相关,但这是一个想法,因为我从virtualenv中运行我的fabfiles。
  2. 我启用了OS X的防火墙。我禁用了OS X的防火墙并且问题仍然存在,所以这不是问题。

2 个答案:

答案 0 :(得分:6)

解决方案

我在virtualenv中发出以下命令后问题不再存在:

pip install -U paramiko

安装了paramiko-1.7.6和pycrypto-2.0.1。以前,我有paramiko-1.7.4和pycrypto-2.0.1。

出现paramiko是罪魁祸首,因为pycrypto版本没有改变。 paramiko 1.7.4和Fabric 0.9之间似乎存在相互作用,通过将paramiko升级到1.7.6来修复。

注意:我在一个virtualenv中升级到paramiko-1.7.6并确认问题消失了。然后我激活了另一个仍然有paramiko-1.7.4的virtualenv并确认问题仍然存在,它确实存在。然后我将paramiko从1.7.4升级到1.7.6并确认问题在virtualenv中也消失了。

答案 1 :(得分:2)

感谢您在此处跟踪此事。我只想注意任何读者Paramiko 1.7.4之前已知与Fabric 0.9一样稳定,但在过去一周或两周内,几个用户已经开始展示这个或类似的问题(断开超时)所以我猜一些其他组件(Python升级,或远程服务器软件包升级,或某些东西)正在发挥作用,正在逐步消除1.7.4中的错误。

我将查看Paramiko 1.7.5 / 1.7.6的更改日志,并收集有关人们的平台/ Python版本/等的更多信息,以尝试查看模式是否出现。

编辑:此问题的新创建的Redmine票证位于:http://code.fabfile.org/issues/show/158