当我运行命令时:
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.
有什么想法?感谢。
from fabric.api import run
def host_type():
run('uname -s')
答案 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],
}