Передача FTP / FXP с сервера на сервер через SSL / TLS

Я хочу установить соединение между двумя (FXPable) FTP-серверами и передать папку с вложенными папками и файлами в ней.

В качестве примера я хочу скопировать (FXP - site-to-site) весь /www/xy.com с сервера 1 на /www/xy.com на сервере 2, но я понятия не имею, как это сделать.

Я нашел интересный модуль на PyPI под названием «ftpext», но я не понимаю его правильно. Этот модуль включает поддержку FXP и PRET. Также то, что я хочу использовать. Так что, может быть, кто-нибудь сможет мне помочь. Мне не нужен этот модуль, если вы можете сделать это по-другому.

Ссылка здесь:

Мой сценарий должен уметь:

usage: %s SERVER1 PORT1 USER1 PASS1 PATH_TO_FOLDER1 SERVER2 PORT2 USER2 PASS2 PATH_TO_DESTINATION_FOLDER

Это результат моего текущего скрипта:

CONNECTiON ESTABLiSHED OVER SSL/TLS TO SERVER 1: *.*.*.*

switched to secure data connection

Changed directory on Server1 successfully to: www

CONNECTiON ESTABLiSHED OVER SSL/TLS TO SERVER 2: *.*.*.*

switched to secure data connection

Changed directory on Server2 successfully to: www

А вот мой сценарий (он действительно быстрый и грязный, без обработки ошибок):

from ftplib import FTP_TLS
import sys

# SECURE CONNECT TO FTP1 OVER TLS/SSL

ftps1 = FTP_TLS
ftps1 = FTP_TLS.port = sys.argv[2]
ftps1 = FTP_TLS('%s' % sys.argv[1])
ftps1.login(sys.argv[3], sys.argv[4])
print("CONNECTiON ESTABLiSHED OVER SSL/TLS TO SERVER 1: %s" % sys.argv[1])
print()
ftps1.prot_p()
print("switched to secure data connection")
print()
ftps1.cwd(sys.argv[5])
print("Changed directory on Server1 successfully to: %s" % sys.argv[5])
print()

# SECURE CONNECT TO FTP2 OVER TLS/SSL

ftps2 = FTP_TLS
ftps2 = FTP_TLS.port = sys.argv[7]
ftps2 = FTP_TLS('%s' % sys.argv[6])
ftps2.login(sys.argv[8], sys.argv[9])
print("CONNECTiON ESTABLiSHED OVER SSL/TLS TO SERVER 2: %s" % sys.argv[6])
print()
ftps2.prot_p()
print("switched to secure data connection")
print()
ftps2.cwd(sys.argv[10])
print("Changed directory on Server2 successfully to: %s" % sys.argv[10])
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
445
1

Ответы 1

Я предполагаю, что вы ищете методы FTPExt.fxp_to или FTPExt.secure_fxp_to:

ftp1 = FTPExt(host1, port1, user1, password1, True)
ftp2 = FTPExt(host2, port2, user2, password2, True)

ftp1.fxp_to(path1, ftp2, path2)

Спасибо :). Я получил SyntaxError: недопустимый синтаксис с решением выше, поэтому я попытался сделать с "" из-за python3 и получил TypeError: объект 'module' не вызывается. Любые идеи?

eClipze 06.12.2018 14:16

Где у вас "синтаксическая ошибка"? Где вы теперь получаете "ошибку типа"?

Martin Prikryl 06.12.2018 14:17

Моя ошибка: из ftpext.ftpext импортировать FTPExt. Но теперь у меня TypeError: __init __ () отсутствует 3 обязательных позиционных аргумента: 'порт', 'пользователь' и 'пароль'.

eClipze 06.12.2018 14:33

Раньше я использовал только импорт ftpext. Я также использовал FTPExt (host, port, user, pass, True, False, 0). По-прежнему та же ошибка с отсутствующими обязательными позиционными аргументами ...

eClipze 06.12.2018 14:35

Упс. Прости. соединительная часть -> ftp1 = FTPExt (host1, port1, user1, password1, True)

eClipze 06.12.2018 14:45

Я не понимаю, как можно получить эту ошибку, если вы явно передадите 5 параметров. Я не получаю ошибок. Отправьте полное сообщение об ошибке со всеми подробностями.

Martin Prikryl 06.12.2018 14:51

FTPExt ('.. **: **, 7777, test, test123, True') Traceback (последний вызов последним): файл «<stdin>», строка 1, в <module> TypeError: __init __ () отсутствует 3 требуется позиционные аргументы: "порт", "пользователь" и "пароль"

eClipze 06.12.2018 14:54

Это не мой код! Вы передаете только один строковый параметр. Используйте FTPExt('*.*.*.*', 7777, 'test', 'test123', True).

Martin Prikryl 06.12.2018 15:14

Боже мой. Я такой глупый :-\. смущает ... Подключение к обоим серверам теперь работает :) Спасибо! Вы случайно протестировали передачу FXP? Я получил «ftplib.error_perm: 553 Error:» (в этом каталоге нет прав на загрузку, но это неправильно). Я думаю, что, возможно, был выбран неправильный путь назначения или что-то еще. Я не эксперт по питону, поэтому будьте снисходительны :) Я тестировал ftp1.secure_fxp_to ('/ www / source / test.rar', ftp2, '/ www / target /') и ftp1.secure_fxp_to ('/ www / источник / ', ftp2,' / www / target / '). У меня такая же ошибка с исходниками бота.

eClipze 06.12.2018 20:31

Оба аргумента пути к (secure_)fxp_to - это пути к файлы, а не каталоги. Итак, ftp1.secure_fxp_to('/www/source/test.rar', ftp2, '/www/target/test.rar')

Martin Prikryl 07.12.2018 08:15

Другие вопросы по теме