Как использовать модуль pysft в Azure Блокнот данных - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь установить соединение sftp с помощью модуля pysftp в блокноте databricks. Вот код, который я написал.

import pysftp as sftp

HOSTNAME = my_sftp_hostname
USERNAME = my_sftp_username
PASSWORD = my_sftp_password
FOLDER = dir_to_be_accessed_in

print('HOSTNAME : '+HOSTNAME )
print('USERNAME : '+USERNAME )
print('PASSWORD : '+PASSWORD )
print('FOLDER : '+FOLDER )


cnopts = sftp.CnOpts()
cnopts.hostkeys = None   
con = sftp.Connection(HOSTNAME,username=USERNAME,password=PASSWORD, cnopts=cnopts)

print(con)

Но когда я запускаю этот код, я получаю эту ошибку TypeError: from_buffer () не может вернуть адрес необработанной строки в пределах байт или объект Unicode

/databricks/python/lib/python3.5/site-packages/pysftp/__init__.py:61: UserWarning: Failed to load HostKeys from /root/.ssh/known_hosts.  You will need to explicitly load HostKeys (cnopts.hostkeys.load(filename)) or disableHostKey checking (cnopts.hostkeys = None).
  warnings.warn(wmsg, UserWarning)
Unknown exception: from_buffer() cannot return the address of the raw string within a bytes or unicode object
Traceback (most recent call last):
  File "/databricks/python/lib/python3.5/site-packages/paramiko/transport.py", line 2075, in run
    self.kex_engine.parse_next(ptype, m)
  File "/databricks/python/lib/python3.5/site-packages/paramiko/kex_ecdh_nist.py", line 53, in parse_next
    return self._parse_kexecdh_reply(m)
  File "/databricks/python/lib/python3.5/site-packages/paramiko/kex_ecdh_nist.py", line 136, in _parse_kexecdh_reply
    self.transport._verify_key(K_S, sig)
  File "/databricks/python/lib/python3.5/site-packages/paramiko/transport.py", line 1886, in _verify_key
    if not key.verify_ssh_sig(self.H, Message(sig)):
  File "/databricks/python/lib/python3.5/site-packages/paramiko/rsakey.py", line 134, in verify_ssh_sig
    msg.get_binary(), data, padding.PKCS1v15(), hashes.SHA1()
  File "/databricks/python/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/rsa.py", line 474, in verify
    self._backend, data, algorithm
  File "/databricks/python/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/utils.py", line 41, in _calculate_digest_and_algorithm
    hash_ctx.update(data)
  File "/databricks/python/lib/python3.5/site-packages/cryptography/hazmat/primitives/hashes.py", line 93, in update
    self._ctx.update(data)
  File "/databricks/python/lib/python3.5/site-packages/cryptography/hazmat/backends/openssl/hashes.py", line 50, in update
    data_ptr = self._backend._ffi.from_buffer(data)
TypeError: from_buffer() cannot return the address of the raw string within a bytes or unicode object

Я прочитал несколько блогов, но не получил никаких конкретных результатов. Пожалуйста, дайте мне знать, если кто-то имеет какое-либо мнение по этому поводу.

Моя версия pysftp: 0.2.9 Paramiko versio: 2.7.1

1 Ответ

1 голос
/ 09 января 2020

У меня сработало следующее исправление.

Похоже, что более новая версия пакета криптографии была установлена ​​по умолчанию вместе с другой библиотекой PyPI, и эта версия криптографии несовместима с версия pyOpenSSL, включенная в Databricks Runtime.

Вы можете попробовать исправить проблему совместимости пакетов, как описано в следующей статье. Затем попробуйте установить самую последнюю версию pyOpenSSL

https://kb.databricks.com/python/python-exec-display-cancelled.html#problem -module-lib-has-no-attribute-ssl_st_init

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...