Ошибка Python Pysftp

Мой код:

import pysftp 
s = pysftp.Connection(host='test.rebex.net', username='demo', password='password') 
data = s.listdir() 
s.close() 
for i in data: 
    print i

Я получаю сообщение об ошибке при попытке подключиться к SFTP-серверу с помощью pysftp.

Это должно быть достаточно просто, но я получаю сообщение об ошибке ниже:

Traceback (most recent call last):
  File "/Users/gavinhinfey/Documents/Python Files/sftp_test.py", line 3, in <module>
    s = pysftp.Connection(host='test.rebex.net', username='demo', password='password')
  File "build/bdist.macosx-10.6-intel/egg/pysftp.py", line 55, in __init__
  File "build/bdist.macosx-10.5-intel/egg/paramiko/transport.py", line 303, in __init__
paramiko.SSHException: Unable to connect to test.rebex.net: [Errno 60] Operation timed out
Exception AttributeError: "'Connection' object has no attribute '_tranport_live'" in <bound     method Connection.__del__ of <pysftp.Connection object at 0x101a5a810>> ignored

Я пробовал использовать разные версии python (в основном 2.7), у меня установлены все зависимости, и я пробовал множество sftp-соединений. Я использую OS X 10.9.1.


person Gavin Hinfey    schedule 13.01.2014    source источник
comment
извините, код ввода кода import pysftp s = pysftp.Connection(host='test.rebex.net', username='demo', password='password') data = s.listdir() s.close() for i in data: print i   -  person Gavin Hinfey    schedule 13.01.2014
comment
вы уверены, что ваш хост правильный и ваши порты не заблокированы? ваш журнал ошибок сообщает вам, что ваше соединение с хостом истекло по тайм-ауту, после чего объект s не инициируется и выдает обычные ошибки для объекта, который не удалось инициировать.   -  person mmdanziger    schedule 13.01.2014
comment
Я могу подключиться к File Zilla с такими же данными? Означает ли это, что мои порты не заблокированы?   -  person Gavin Hinfey    schedule 13.01.2014
comment
Странный. Может быть, попробуйте log=True в своем kwargs для Connection и опубликуйте то, что вы там получите.   -  person mmdanziger    schedule 13.01.2014
comment
Извините, но когда я добавляю log = True, где он выводит журнал? Спасибо   -  person Gavin Hinfey    schedule 13.01.2014
comment
Когда вы используете File Zilla, какой протокол вы используете? FTP, FTPS или SFTP?   -  person Robᵩ    schedule 13.01.2014
comment
Я просто пробовал использовать pythons, встроенный ftplib, и он работает. Похоже, мне нужен был FTP, а не SFTP. Мои извенения.   -  person Gavin Hinfey    schedule 13.01.2014


Ответы (3)


Эта первоначальная ошибка связана с проблемой подключения к удаленному серверу (SSHException). Второй (AttributeError) связан с ошибкой в ​​коде, возникающей при сбое соединения. Исправлено в последней версии pysftp.

https://pypi.python.org/pypi/pysftp

pip install -U pysftp

твой друг.

person Dundee MT    schedule 15.05.2014
comment
Пип Python 2.7 говорит: no such option: -u. - person Babken Vardanyan; 05.10.2014

обновление пакета не сработало для меня, так как он уже был актуальным (по крайней мере, для Python 2.7)

Нашел более подходящий подход здесь.

1) Вы можете вручную добавить ключ ssh в файл known_hosts

ssh test.rebex.net

2) Или вы можете установить флаг, чтобы игнорировать его

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None    # disable host key checking.
with pysftp.Connection('host', username='me',private_key=private_key,
                           private_key_pass=private_key_password,
                           cnopts=cnopts) as sftp
    # do stuff here
person Maviles    schedule 13.07.2016
comment
Никогда не используйте вариант 2), если вы не заботитесь о безопасности! - person Martin Prikryl; 21.10.2017

@ Martin.Prikryl: установка hostkeys = None очень полезна на начальном этапе кодирования с помощью pysftp. Отладка программы, которая продолжает давать сбой из-за известного исключения, скрывает другие проблемы, требующие внимания, например, установление фактического соединения. Я смогу разобраться с проблемой «человек посередине» позже, когда узнаю, что мой код действительно работает правильно.

@All: в текущем объекте pysftp.CnOpts () обнаружена ошибка:

cnopts = pysftp.CnOpts()
cnopts.hostkeys = None

Приведенный выше код не препятствует проверке ключа хоста.

python getfile_v3.py --help Traceback (последний вызов последним): файл getfile_v3.py, строка 9, в cnopts = pysftp.CnOpts () Файл c: \ Program Files \ Python \ Python38 \ lib \ site-packages \ pysftp_ < em> init _.py, строка 64, в init, возбудите HostKeysException («Ключи хоста не найдены») pysftp.exceptions.HostKeysException: Ключи хоста не найдены

Вторая строка не выполняется, потому что первая по умолчанию выполняет проверку ключа хоста. Если я установил ключ с помощью:

      cnopts = pysftp.CnOpts(hostkeys=None)

та же ошибка.

Похоже, что hostkeys устарел, и нет возможности отключить проверку ключа хоста.

Джо Уайт

person Joseph White    schedule 04.02.2021
comment
Этот ответ не отвечает на исходный вопрос. Может быть, попробовать сделать отчет об ошибке или задать другой вопрос? - person Yang Yushi; 05.02.2021