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

时间:2009-09-24 01:51:22

标签: python

当我运行命令时:

fab -H localhost host_type

我收到以下错误:

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

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

Aborting.

有什么想法?感谢。

Fabfile.py

from fabric.api import run
def host_type():
    run('uname -s')

配置

  • Fabric 1.0a0(从most recent Github commit---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

4 个答案:

答案 0 :(得分:26)

重要的部分不是信息的“低级错误”部分 - 重要的部分是“拒绝连接”部分。尝试连接到关闭的端口时,您将收到“连接被拒绝”消息。

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

ssh localhost

您可能会收到类似

的消息
ssh: connect to host localhost: Connection refused

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

答案 1 :(得分:2)

我遇到了同样的问题,但原因有所不同:虽然我可以通过SSH(默认端口22)轻松登录服务器,但Fabric尝试在已关闭的端口9090上进行连接。

最后我意识到我已经在我的旧fabfile中为某些WSGI服务器设置定义了“env.port = 9090”;虽然这从来都不是问题,但几周前我更新了我的Python安装,现在fabric使用env.port进行SSH连接。 我刚刚重命名了配置,一切都很好。

答案 2 :(得分:2)

在使用Vagrant ssh到VM的情况下,OS X 10.11.4和Fabric 1.10.1也会发生这种情况,Vagrant从localhost进行端口转发。在这种情况下,localhost正在解析为IPv6 ::1地址(不是/etc/hosts文件),并给出了此错误。

修复是通过使用fabfile中的127.0.0.1地址而不是主机名来强制使用IPv4。使用/etc/hosts中的主机名并使用此地址无效。

您可能还想尝试这些useful tips for debugging connection issues in Fabric

答案 3 :(得分:1)

env.roledefs = {
'role1': env.hosts[0:5],
'role2':[env.hosts[5],]
}

如果" role"我遇到了同样的错误值不是列表。例如,上面的代码可以工作,但以下不会。

 env.roledefs = {
'role1': env.hosts[0:5],
'role2':env.hosts[5],
}