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

Mat*_*kin 5 python ssh virtualenv paramiko fabric

Disconnecting from username@server... done.在我发出fab命令时,在显示新的命令提示符之前,Fabric显示将近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
Run Code Online (Sandbox Code Playgroud)

服务器配置

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

客户端配置

  • 操作系统:Mac OS X 10.6.3
  • 面料版本0.9
  • Vritualenv ver 1.4.7
  • pip ver 0.7

简单的fabfile.py用于测试

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

from fabric.api import run

def host_type():
    run('uname -s')
Run Code Online (Sandbox Code Playgroud)

关于问题成因的思考

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

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

Mat*_*kin 6

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

pip install -U paramiko
Run Code Online (Sandbox Code Playgroud)

这个安装了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中也消失了.