Подтвердить что ты не робот

Почему я получаю ошибку сокета низкого уровня при использовании библиотеки python Fabric?

Когда я запускаю команду:

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)
  • Paramiko 1.7.4
  • PyCrypto 2.0.1
  • Virtualenv ver 1.3.3
  • Python 2.6.2+ (release26-maint: 74924, 18.09.2009, 16:03:18)
  • Mac OS X 10.6.1
4b9b3361

Ответ 1

Важной частью является не "ошибка низкого уровня" сообщения - важной частью является часть "Отказано в подключении". При попытке подключения к закрытому порту вы получите сообщение об отказе подключения.

Наиболее вероятным сценарием является то, что вы не запускаете ssh-сервер на своем компьютере в то время, когда работает Fabric. Если вы делаете

ssh localhost

вы, вероятно, получите сообщение, похожее на

ssh: connect to host localhost: Connection refused

Итак, вам нужно будет выйти и настроить SSH-сервер на своем компьютере, прежде чем вы сможете продолжить работу с Fabric.

Ответ 2

У меня была та же проблема, но причина была другая: хотя я мог легко войти на сервер через SSH (порт по умолчанию 22), ткань попыталась подключиться к закрытому порту 9090.

Наконец, я узнал, что я определил "env.port = 9090" в моем старом файле для какой-либо настройки сервера WSGI; в то время как это никогда не было проблемой, я обновил мою установку Python несколько недель назад, и теперь ткань использует env.port для своего SSH-соединения. Я просто переименовал этот конфиг, и все снова хорошо.

Ответ 3

Это также может произойти в OS X 10.11.4 и Fabric 1.10.1, в случае, когда вы используете ssh'ing для виртуальной машины с использованием Vagrant, которая выполняет переадресацию портов с localhost. В этом случае localhost разрешал адрес IPv6 ::1 (не из-за файла /etc/hosts) и выдавал эту ошибку.

Исправление заключалось в том, чтобы принудительно использовать IPv4, используя адрес 127.0.0.1 в файле fabfile вместо имени хоста. Использование имени хоста в /etc/hosts с этим адресом не работает.

Вы также можете попробовать эти полезные советы для отладки проблем подключения в Fabric.

Ответ 4

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

Я столкнулся с той же ошибкой, если значение "role" НЕ СПИСОК. например, приведенный выше код работает, но следующее не делает.

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