pysftp игнорирует отключенную проверку хоста - PullRequest
1 голос
/ 03 мая 2019

При попытке использовать pysftp для извлечения / отправки файла с / на SFTP-сервер (через выделенное соединение) я пытаюсь отключить проверку хост-ключа, но все равно получаю предупреждение о том, что pysftp не может загрузитьhostkeys из файла known_hosts.Несмотря на предупреждение, процесс передачи файла завершается, как и ожидалось.

Я знаю, что не рекомендуется пропускать проверку ключей, но хост не публикует ключи, и его связь происходит в частной сети, передающейзашифрованные файлы, поэтому риск в этом конкретном случае относительно низкий.

Тем не менее, я попытался поместить пустой файл known_hosts в правильный каталог, только чтобы получить более серьезную ошибку.

Следующий пример кода прекрасно работает для меня ...кроме приведенного ниже предупреждения.

import sys
import pysftp

hostname = "123.123.123.123"
username = "abc"       
password = "xyz"  

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

with pysftp.Connection(hostname, username=username, password=password, cnopts=cnopts) as sftp:
    sftp.get('/test.get', preserve_mtime=True)
    sftp.put('test.put', preserve_mtime=True)

При выполнении этого сценария генерируется следующее предупреждение:

UserWarning: Failed to load HostKeys from C:\Users\eah036\.ssh\known_hosts.  
You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename)) 
or disableHostKey checking (cnopts.hostkeys = None).
  warnings.warn(wmsg, UserWarning)

Я мог бы жить с генерируемыми сообщениями предупреждения, но я бы предпочел, чтобычистый вывод терминала при выполнении кода.Любые мысли о том, почему параметр cnopts.hostkeys кажется "игнорируемым"?

1 Ответ

0 голосов
/ 04 мая 2019

Предупреждение не может быть подавлено, начиная с pysftp 0.2.9.

Все, что вы можете сделать, это создать файл known_hosts с хотя бы одной записью (это не обязательно должна быть правильная запись, только любая запись с действительным синтаксисом). Вы можете создать файл либо в стандартном месте, либо в любом другом месте, если вы явно укажете его путь в конструкторе CnOpts.


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

См. Мой ответ на Проверка ключа хоста с помощью pysftp .

...