为什么在使用Fabric 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(是从最新的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服务器。