Как определить набор символов для учетных данных в pysftp? - PullRequest
1 голос
/ 15 октября 2019

Я пытаюсь загрузить файл с удаленного сервера. Для этого мне нужно определить 'charset = ASCII' (я пытался в клиенте FileZilla). Тогда только соединение получает успех, и я могу просматривать файлы. В противном случае я получаю 'Ошибка аутентификации' со стороны клиента (с помощью клиента FileZilla)

Я использую библиотеку pysftp для подключения того же удаленного сервера в моей программе Python;

 connOption = pysftp.CnOpts()
 connOption.hostkeys = None
    srv = pysftp.Connection(host=host, username=username, password=password, port=port, cnopts=connOption)

Я не знаю, как определить Charset параметр здесь. Нет параметра charset для метода подключения.

Как мне это сделать с помощью pysftp?

paramiko.ssh_exception.AuthenticationException: аутентификация не удалась.

Мое имя пользователя содержит _ и символов. Я просто копирую его из одного источника,

Например: xxxxx_O’xxxxx

Успешная попытка из FileZilla:

Status: Connecting to xxxxx...
Status: Connected to xxxx
Status: Retrieving directory listing...
Status: Listing directory /
Status: Directory listing of "/" successful

Вывод файла журнала:

2019-10-15 16:57:04 4480 1 Status: Connecting to xxxx...
2019-10-15 16:57:04 4480 1 Response: fzSftp started, protocol_version=8
2019-10-15 16:57:04 4480 1 Command: open "xxxx_O’xxxx@xxxxx" 22
2019-10-15 16:57:06 4480 1 Command: Trust new Hostkey: Once
2019-10-15 16:57:06 4480 1 Command: Pass: *********************
2019-10-15 16:57:06 4480 1 Status: Connected to xxxxxxx
2019-10-15 16:57:06 4480 1 Status: Retrieving directory listing...
2019-10-15 16:57:06 4480 1 Command: pwd
2019-10-15 16:57:06 4480 1 Response: Current directory is: "/"
2019-10-15 16:57:06 4480 1 Command: ls
2019-10-15 16:57:06 4480 1 Status: Listing directory /
2019-10-15 16:57:07 4480 1 Status: Directory listing of "/" successful

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Попробуйте указать пароль, используя байты:

password=b"xxxxx_O’xxxxx"

Кстати, протокол SFTP / SSH требует использования кодировки UTF-8. Если ваш сервер использует другую кодировку, значит он сломан. И вам определенно не следует использовать имена пользователей, отличные от ASCII, на таком сервере (и использование таких имен даже на сервере с поддержкой UTF-8 сомнительно).

Хотя кодировка ASCII в любом случае не имеет символа . Таким образом, в конечном итоге проблема, вероятно, заключается в том, что ваше имя пользователя на самом деле не содержит , но независимо от того, что FileZilla (и программное обеспечение, создавшее учетную запись) преобразовали в.

0 голосов
/ 15 октября 2019

У меня такая же проблема с pysftp. Пожалуйста, попробуйте это.

Сначала получите ключ хоста от сервера sftp:

ssh-keyscan example.host.com | grep "ssh-rsa" > sftpserver01.pub 

Код Python:

def download_files_from_sftp(input_subdir):
    cnopts = pysftp.CnOpts()
    cnopts.hostkeys = cnopts.hostkeys.load('{}/sftpserver01.pub'.format(pubkeys_dir))   

    logging.info('I:--START--:--Download files from sftp--')

    try:
        with pysftp.Connection(host=hostname, username=username, password=password, cnopts=cnopts) as sftp:
            sftp.cwd(sftpin_input_dir)
            for file_name in sftp.listdir():
                if not file_name.startswith('.'):
                    local_file_path = '{}/{}'.format(local_input_dir, file_name)
                    sftp.get(file_name, local_file_path)
            sftp.close()
        logging.info('O:--SUCCESS--:--Download files from sftp--')
    except Exception as e:
        logging.info('O:--FAIL--:--Download files from sftp--:errorDesc/{}'.format(e))
        raise
...