首页 > 解决方案 > pysftp/Paramiko 中的“类型对象‘EllipticCurvePublicKey’没有属性‘from_encoded_point’”

问题描述

我在 DigitalOcean 上运行 Ubuntu 18.04 droplets,需要设置它们之间的文件传输。

Pysftp/Paramiko 库很适合这项工作,但我无法建立连接。从桌面连接相同的代码效果很好。

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

with pysftp.Connection(host='ip adress',  username='username',
                       password='pass', cnopts=cnopts) as sftp:

初始化连接时的错误消息是:

Traceback (most recent call last):
  File "/home/airflow/airflow/tasks/ta_auto/screener_slave.py", line 315, in <module>
    cnopts = pysftp.CnOpts()#knownhosts='/home/airflow/.ssh/known_hosts')
  File "/home/airflow/pipeline/lib/python3.6/site-packages/pysftp/__init__.py", line 54, in __init__
    self.hostkeys.load(knownhosts)
  File "/home/airflow/pipeline/lib/python3.6/site-packages/paramiko/hostkeys.py", line 101, in load
    e = HostKeyEntry.from_line(line, lineno)
  File "/home/airflow/pipeline/lib/python3.6/site-packages/paramiko/hostkeys.py", line 364, in from_line
    key = ECDSAKey(data=decodebytes(key), validate_point=False)
  File "/home/airflow/pipeline/lib/python3.6/site-packages/paramiko/ecdsakey.py", line 163, in __init__
    key = ec.EllipticCurvePublicKey.from_encoded_point(
AttributeError: type object 'EllipticCurvePublicKey' has no attribute 'from_encoded_point'

标签: pythonsshsftpparamikopysftp

解决方案


升级到最新版本的 Paramiko – 2.6 截至目前。

这很可能与以下问题相同:
How to quiet EllipticCurvePublicNumbers.encode_point CryptographyDeprecationWarning when using Paramiko in Python


强制警告:不要设置cnopts.hostkeys = None,除非你不关心安全。有关正确的解决方案,请参阅使用 pysftp 验证主机密钥


推荐阅读