簡體   English   中英

為什么在使用Fabric python庫時收到低級套接字錯誤?

[英]Why am I receiving a low level socket error when using the Fabric python library?

當我運行命令時:

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 commit --- b8e1b6a安裝
  • 帕拉米科1.7.4
  • PyCrypto 2.0.1
  • 虛擬環境1.3.3版
  • Python 2.6.2+(版本26-maint:74924,2009年9月18日,16:03:18)
  • Mac OS X 10.6.1

重要的部分不是消息的“低級錯誤”部分-重要的部分是“連接被拒絕”部分。 嘗試連接到關閉的端口時,您會收到“拒絕連接”消息。

最可能的情況是,在運行Fabric時,您不在計算機上運行ssh服務器。 如果你這樣做

ssh localhost

您可能會收到類似的消息

ssh: connect to host localhost: Connection refused

因此,您必須外出並在計算機上設置SSH服務器,然后才能從那里繼續使用Fabric。

我遇到了同樣的問題,但原因有所不同:雖然我可以輕松地通過SSH(默認端口22)登錄到服務器,但結構嘗試在封閉的端口9090上進行連接。

最終,我意識到我已經在舊的fabfile中為某些WSGI服務器設置定義了“ env.port = 9090”。 雖然這從來沒有問題,但我在幾周前更新了Python安裝,fabric現在使用env.port進行SSH連接。 我剛剛重命名了該配置,一切恢復正常。

在使用Vagrant切換到VM的情況下,這也可能在OS X 10.11.4和Fabric 1.10.1中發生,Vagrant會從本地主機轉發端口。 在這種情況下,本地主機解析為IPv6 ::1地址(不是由於/etc/hosts文件),並給出此錯誤。

解決方法是通過使用fabfile中的127.0.0.1地址而不是主機名來強制使用IPv4。 /etc/hosts使用該地址使用主機名無效。

您可能還想嘗試以下有用的技巧來調試Fabric中的連接問題

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

如果“角色”值不是“ LIST ”,則遇到相同的錯誤。 例如,上面的代碼有效,但下面的無效。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM