为什么我在使用Fabric python库时收到低级套接字错误?

Mat*_*kin 20 python

当我运行命令时:

fab -H localhost host_type
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[localhost] Executing task 'host_type'
[localhost] run: uname -s

Fatal error: Low level socket error connecting to host localhost: Connection refused

Aborting.
Run Code Online (Sandbox Code Playgroud)

有什么想法为什么?谢谢.

Fabfile.py

from fabric.api import run
def host_type():
    run('uname -s')
Run Code Online (Sandbox Code Playgroud)

组态

  • Fabric 1.0a0(从最近的Github提交安装--- b8e1b6a)
  • Paramiko 1.7.4
  • PyCrypto 2.0.1
  • Virtualenv ver 1.3.3
  • Python 2.6.2+(release26-maint:74924,Sep 18 2009,16:03:18)
  • Mac OS X 10.6.1

Mar*_*off 26

重要的部分不是消息的"低级别错误"部分 - 重要的部分是"拒绝连接"部分.尝试连接到已关闭的端口时,您将收到"连接被拒绝"消息.

最可能的情况是,您在Fabric运行时未在计算机上运行ssh服务器.如果你这样做

ssh localhost
Run Code Online (Sandbox Code Playgroud)

你可能会收到类似的消息

ssh: connect to host localhost: Connection refused
Run Code Online (Sandbox Code Playgroud)

因此,您必须先在计算机上设置SSH服务器,然后才能从那里继续使用Fabric.

  • @JonathanHartley(现在)有一个[关于这个主题的GitHub问题](https://github.com/fabric/fabric/issues/98).与此同时,运行SSH服务器实际上非常简单:首先执行`sudo apt-get install ssh`以确保安装它(即使您认为这样做).然后根据需要做`sudo service ssh start` |`stop` |`restart`.干杯. (4认同)
  • 我发现我无法使用我用来部署到我们服务器的相同fab:install命令在本地多态安装我的开发环境.我会为两者使用相同的脚本,这样我的dev env就像我能做的那样与我们的服务器类似.在我看来,这应该是一个常见的用例.我想做一些与众不同的事吗? (2认同)
  • @JonathanHartley作为替代你也可以设置你的Fabfile来使用这样的函数,无论你在哪里做`execute`或`run`:`def do(*args,**kwargs):_do = local if env. host_string =='localhost'否则运行; _do(*args,**kwargs)`.当然,这不完全是一回事,但在某些情况下它会做到.不确定它是否是首选的方式,但fabfiles的有趣之处在于它们通常只是你的玩法:) (2认同)