[英]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.
有什么想法嗎? 謝謝。
from fabric.api import run
def host_type():
run('uname -s')
重要的部分不是消息的“低級錯誤”部分-重要的部分是“連接被拒絕”部分。 嘗試連接到關閉的端口時,您會收到“拒絕連接”消息。
最可能的情況是,在運行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.