Python ftplib.error_perm: 530 Ошибка аутентификации при входе

Я хочу написать сценарий для подключения моего FTP-сервера, но у меня он не работает.

from ftplib import FTP
ftp=FTP()
ftp.set_debuglevel(2)
ftp.connect('192.169.137.100')
ftp.login('test','test')
ftp.dir()
ftp.close()

и при сборке этого скрипта я получил эту информацию

*get* '220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n'
*get* '220-You are user number 1 of 50 allowed.\r\n'
*get* '220-Local time is now 23:46. Server port: 21.\r\n'
*get* '220-This is a private system - No anonymous login\r\n'
*get* '220 You will be disconnected after 15 minutes of inactivity.\r\n'
*resp* '220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\n220-You are user number 1 of 50 allowed.\n220-Local time is now 23:46. Server port:  21.\n220-This is a private system - No anonymous login\n220 You will be   disconnected after 15 minutes of inactivity.'
*cmd* 'USER test'
*put* 'USER test\r\n'
*get* '331 User test OK. Password required\r\n'
*resp* '331 User test OK. Password required'
*cmd* 'PASS ****'
*put* 'PASS ****\r\n'
*getTraceback (most recent call last):
 File "D:\photoWebSite\py_test.py", line 9, in <module>
* '530 Login authentication failed\r\n'
*resp* '530 Login authentication failed'
    ftp.login('test','test')
    File "D:\LinuxSL\python27\lib\ftplib.py", line 393, in login
    if resp[0] == '3': resp = self.sendcmd('PASS ' + passwd)
File "D:\LinuxSL\python27\lib\ftplib.py", line 249, in sendcmd
    return self.getresp()
File "D:\LinuxSL\python27\lib\ftplib.py", line 224, in getresp
    raise error_perm, resp
ftplib.error_perm: 530 Login authentication failed

Я надеюсь, что какая-то помощь, пожалуйста.


person allen-x    schedule 21.01.2017    source источник
comment
Я могу подключиться к своему ftp-серверу, когда использую командную строку.   -  person allen-x    schedule 21.01.2017


Ответы (3)


Вы можете попробовать использовать FTP_TLS следующим образом:

from ftplib import FTP_TLS
ftp=FTP_TLS()
ftp.set_debuglevel(2)
ftp.connect('192.169.137.100', 22)
ftp.sendcmd('USER test')
ftp.sendcmd('PASS test')
ftp.dir()
ftp.close()
person tomcy    schedule 21.01.2017

Я использовал ftplib и не смог подключиться из-за error_perm, использовал pysftp, и у меня это сработало.

import pysftp
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None   
myHostname = "abc.org"
myUsername = "username"
myPassword = "password"

with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword, cnopts=cnopts) as sftp:
    print ("Connection succesfully stablished ... ")
    directory_structure = sftp.listdir_attr()
    for attr in directory_structure:
        print (attr.filename, attr)
person Harry_pb    schedule 08.01.2020

Убедитесь, что сервер поддерживает вход с учетными данными!

Есть вероятность, что он поддерживает только анонимный вход

Использовать:

def connect(host, username, passwd, port):
    from ftplib import FTP
    print(f'host:{host}, username:{username} passwd:{passwd}, port: {port}')
    #instance of ftp
    ftp = FTP()
    #set the debig level
    ftp.set_debuglevel(2)
    #connect to ftp
    ftp.connect(host=str(host), port=int(port))
    print('connected')
    #login
    print('login in.....')
    if username:
        if passwd:
            ftp.login(user=username, passwd=passwd)
        else:
            print('Password required')
            exit(0)
    else:
        #login without username and password
        ftp.login()
    #return the dirs list and ftp object
    dirs = list()
    ftp.retrlines("LIST", dirs.append())
    return ftp, dirs

Приведенный выше код проверяет, передал ли пользователь имя пользователя и пароль. Если да, войдите в систему с учетными данными. ЕСЛИ не войдет в систему анонимно. Но я предлагаю вам сначала выяснить и включить учетную запись для входа на сервер. Попробуйте ftp-сервер python по адресу: https://github.com/malgulam/100ProjectsOfCode/blob/main/ftpclient/ftpclient_simple/ftp_server.py и https://github.com/keepitsimple/pyFTPclient и запустите своего клиента и используйте функцию подключения выше.

person George m    schedule 09.12.2020