Как получить доступ к FTPS-серверу pyftpdlib на Amazon EC2?

Я пытаюсь создать простой FTPS-сервер на своем экземпляре Ubuntu Amazon EC2, используя библиотеку Python pyftpdlib.

Вот код прямо из документации:

#!/usr/bin/env python

"""
An RFC-4217 asynchronous FTPS server supporting both SSL and TLS.
Requires PyOpenSSL module (http://pypi.python.org/pypi/pyOpenSSL).
"""

from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.contrib.handlers import TLS_FTPHandler
import os


def main():
    authorizer = DummyAuthorizer()
    authorizer.add_user('ubuntu', '*****', os.getcwd(), perm='elradfmw')
    authorizer.add_anonymous('.')
    handler = TLS_FTPHandler
    handler.certfile = 'keycert.pem'
    handler.authorizer = authorizer
    handler.masquerade_address = '52.23.244.142'
    # requires SSL for both control and data channel
    handler.tls_control_required = True
    handler.tls_data_required = True
    handler.passive_ports = range(60000, 60099)
    server = FTPServer(('', 21), handler)
    server.serve_forever()

if __name__ == '__main__':
    main()

Когда я запускаю скрипт на своем экземпляре Amazon EC2 и пытаюсь удаленно подключиться с помощью FileZilla, я получаю:

Status: Connecting to 52.23.244.142:21...
Status: Connection established, waiting for welcome message...
Response:   220 pyftpdlib 1.4.0 ready.
Command:    AUTH TLS
Response:   234 AUTH TLS successful.
Status: Initializing TLS...
Status: Verifying certificate...
Command:    USER ubuntu
Status: TLS/SSL connection established.
Response:   331 Username ok, send password.
Command:    PASS *****
Response:   230 Login successful.
Command:    OPTS UTF8 ON
Response:   501 Invalid argument.
Command:    PBSZ 0
Response:   200 PBSZ=0 successful.
Command:    PROT P
Response:   200 Protection set to Private
Command:    OPTS MLST type;perm;size;modify;unix.mode;unix.uid;unix.gid;
Response:   200 MLST OPTS type;perm;size;modify;unix.mode;unix.uid;unix.gid;
Status: Connected
Status: Retrieving directory listing...
Command:    PWD
Response:   257 "/" is the current directory.
Command:    TYPE I
Response:   200 Type set to: Binary.
Command:    PASV
Response:   227 Entering passive mode (52,23,244,142,174,172).
Command:    MLSD
Response:   150 File status okay. About to open data connection.
Error:  Connection timed out
Error:  Failed to retrieve directory listing

Я думаю, что я что-то упускаю. Могу ли я получить некоторую помощь?


person Santosh Ghimire    schedule 08.12.2015    source источник
comment
В чем проблема/вопрос?   -  person Martin Prikryl    schedule 08.12.2015
comment
@MartinPrikryl Я могу получить доступ к тому же ftp-серверу, который работает на моей локальной машине. Но не могу получить доступ к ftp-серверу, работающему на моем ec2. Почему?   -  person Santosh Ghimire    schedule 08.12.2015
comment
Почему? Что просходит? Любое сообщение об ошибке?   -  person Martin Prikryl    schedule 08.12.2015
comment
@MartinPrikryl Просто добавил сообщение об ошибке в конце сообщения.   -  person Santosh Ghimire    schedule 08.12.2015


Ответы (1)


  1. #P1# #P2#
    #P3#
    #P4# #P5#
    handler.masquerade_address = '52.23.244.142'
    
  2. FileZilla не может подключиться к порту 50048 (195 ‹‹ 8 + 128). Вероятно, вы не открыли порты в диапазоне портов пассивного режима FTP в брандмауэре EC2.

    См. раздел Настройка FTP на Amazon Cloud Server (в частности, раздел Шаг 2. Откройте порты FTP на вашем Экземпляр EC2" в лучший ответ).

    Чтобы избежать открытия всего диапазона непривилегированных портов, ограничьте FTP-сервер, чтобы он использовал меньший диапазон портов, используя handler.passive_ports:

    handler.passive_ports = range(60000, 60099)
    

Для получения общей информации см. мою статью о настройке сети в отношении пассивного FTP ( и активный) режимы подключения.

person Martin Prikryl    schedule 08.12.2015
comment
Допустим, у меня есть веб-сайт, расположенный по адресу 52.23.244.142. Какой именно адрес указать ftp-клиенту для их передачи. Это как 52.23.244.142:20 или 52.23.244.142 ? - person Skyler; 12.10.2017
comment
@Skyler Адрес 52.23.244.142. 20 - портвейн. Но FTP-порт — 21, а не 20. И FTP-клиент будет использовать его по умолчанию. Если у вас есть дополнительные вопросы, опубликуйте отдельный вопрос на соответствующем сайте (например, Super User). - person Martin Prikryl; 12.10.2017