为什么在使用Fabric Python库时会出现低级套接字错误?

20 投票
4 回答
14386 浏览
提问于 2025-04-15 14:33

当我运行这个命令时:

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(是从最新的Github提交---b8e1b6a安装的)
  • Paramiko 1.7.4
  • PyCrypto 2.0.1
  • Virtualenv 版本 1.3.3
  • Python 2.6.2+(release26-maint:74924, 2009年9月18日,16:03:18)
  • Mac OS X 10.6.1

4 个回答

2

在 OS X 10.11.4 和 Fabric 1.10.1 的情况下,如果你通过 Vagrant 连接到虚拟机(VM),而 Vagrant 会把本地的端口转发到虚拟机上,这种情况也可能发生。在这种情况下,本地地址(localhost)被解析成了 IPv6 的 ::1 地址(这不是因为 /etc/hosts 文件的原因),所以就出现了这个错误。

解决办法是强制使用 IPv4 地址,也就是在 fabfile 中用 127.0.0.1 代替主机名。用 /etc/hosts 文件中的主机名和这个地址组合是没用的。

你也可以试试这些 调试 Fabric 连接问题的有用技巧

2

我也遇到过同样的问题,但原因不一样:我可以很轻松地通过SSH(默认端口22)登录到服务器,但fabric却试图连接一个关闭的9090端口。

最后我发现,我在旧的fabfile中定义了“env.port=9090”,这是为了某个WSGI服务器的设置;虽然这之前从来没有问题,但几周前我更新了Python的安装,结果fabric现在用env.port来进行SSH连接。我只需把那个配置改个名字,一切又恢复正常了。

27

这条信息中,最重要的不是“低级错误”那部分,而是“连接被拒绝”这部分。当你尝试连接一个关闭的端口时,就会收到“连接被拒绝”的提示。

最有可能的情况是,当你运行Fabric的时候,你的电脑上并没有启动ssh服务器。如果你启动了

ssh localhost

你可能会看到类似这样的信息

ssh: connect to host localhost: Connection refused

所以,在继续使用Fabric之前,你需要先在你的电脑上设置一个SSH服务器。

撰写回答