Почему я получаю ошибку сокета низкого уровня при использовании библиотеки 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
Ответы
Ответ 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],
}