У меня много проблем с подключением к FTP. Сервер, который я использую, не поддерживает TLS, как в случае с предыдущим сервером. Вместо этого он использует SSH с Ed25519.
Шаг 1
Я попытался зайти на свой FTP с помощью PUTTY. Затем я получил всплывающее окно с отпечатком пальца, нажал «Да» и скопировал данные «hostkey» из реестра Windows.
Шаг 2
Я жестко запрограммировал его.
Ошибки
Первой ошибкой было Incorrect padding
, даже когда hostkey делился на 3. Количество символов в вставленном мною hostkey равно 132. Это было так легкодля соединения с ftplib.FTP_TLS.
Что мне нужно
Проверьте мой код, если способ, которым я пытаюсь использовать, правильный. Я прилагаю свой код ниже. После почти двух дней я сдаюсь. Я не смог найти ни одного примера, который бы использовал логирование с ключом ed25519.
код
import pysftp as sftp
import paramiko
from base64 import decodebytes
myHostname = ""
myUsername = ""
myPassword = ""
key = b'0x2994....,0xe4fb.....'
print(len(key), len(key)%4, len(key)%3)
key = paramiko.ed25519key.Ed25519Key(data=decodebytes(key).hex())
cnopts = sftp.CnOpts()
cnopts.hostkeys.add(myHostname, 'ssh-ed25519', key)
print('TYPE CNOPTS', cnopts, type(cnopts), cnopts.__dict__['hostkeys'].__dict__)
def ftp_connect():
try:
ftp = sftp.Connection(host=myHostname, username=myUsername, password=myPassword, cnopts=cnopts)
except Exception as ex:
print('CONN EX', ex)
else:
return ftp
ftp_connect()