LFTP 550 отказано в разрешении - PullRequest
0 голосов
/ 06 июля 2018

Я пытался создать скрипт, который будет загружать некоторые файлы на FTP-сервер с использованием lftp, но пока безуспешно. Если я использовал команду build in ftp в Debian, мне удалось подключиться и положить файл. Вот вывод отладочной команды lftp:

lftp xxx.xxx.xxx.xxxx -e "put -O /out/ some_file_name" -d
---- using user `user01' and password from ~/.netrc
---- Resolving host address...
---- 1 address found:xxx.xxx.xxx.xxxx
---- Connecting to xxx.xxx.xxx.xxxx (xxx.xxx.xxx.xxxx) port 21
<--- 220 (vsFTPd 2.0.7)                                         
---> FEAT
<--- 211-Features:                                                    
<---  EPRT
<---  EPSV
<---  MDTM
<---  PASV
<---  REST STREAM
<---  SIZE
<---  TVFS
<---  UTF8
<--- 211 End
---> OPTS UTF8 ON
<--- 200 Always in UTF8 mode.                                   
---> USER user01
<--- 331 Please specify the password.                           
---> PASS XXXX
<--- 230 Login successful.                                            
---> PWD
<--- 257 "/"                                                              
---> TYPE I
<--- 200 Switching to Binary mode.                                        
---> EPSV
<--- 550 Permission denied.                                               
---- Switching passive mode off
---- Closing data socket
---- Closing control socket

Как видите, я использую сохраненные имя пользователя и пароль из файла .netrc. У меня есть другой скрипт, который подключается к тому же серверу, но загружает файлы и переименовывает их в удаленной папке ftp, снова используя lftp. Может кто-нибудь помочь и объяснить, почему я не могу поставить с lfpt, но может сделать это с помощью ftp.

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

после добавления set ftp:passive-mode true и set ftp:prefer-epsv false в /etc/lftp.conf ошибка изменяется

<--- 230 Login successful.                                            
---> PWD
<--- 257 "/"                                                              
---> TYPE I
<--- 200 Switching to Binary mode.                                        
---> PASV
<--- 227 Entering Passive Mode (xxx.xxx.xxx.xxx,76,92)                      
---- Connecting data socket to (xxx.xxx.xxx.xxx) port 19548
---- Data connection established                                            
---> ALLO 710
<--- 550 Permission denied.                                               
---> STOR out/my_file_name
---> ABOR
put: Access failed: 550 Permission denied. (/out/my_file_name)
---- Closing aborted data socket
---- Closing control socket

Хорошо, я понимаю, что означает АЛЛО

Команда ALLO может быть отправлена ​​на сервер, для которого требуется зарезервировать необходимое место для закачки до того, как произойдет передача

поэтому после быстрого поиска на странице справки по ftp я нашел команду выключить ее. После добавления set ftp:use-allo false и epsv false все в порядке. Большое спасибо:)

0 голосов
/ 09 января 2019

lftp -e "set ftp:use-allo false; set ftp:passive-mode true; set ftp:prefer-epsv false; mirror -R {local dir} {remote dir}" -u {username},{password} {host}

Используйте эту единственную команду для синхронизации вашего файла с локального сервера без ошибки разрешения 550.

0 голосов
/ 06 июля 2018

Хотя 550 Permission denied. является странным ответом на команду EPSV, это означает, что сервер или некоторое промежуточное окно между ними не понимают команду EPSV (скорее всего, промежуточное окно, поскольку ответ на FEAT показывает EPSV как поддерживается). Если вы используете встроенную команду ftp вместо lftp, она, вероятно, будет использовать более старую команду PASV (только для IPv4) вместо более новой команды EPSV (с поддержкой IPv4 + IPv6).

В соответствии с справочной страницей есть настройка ftp:prefer-epsv, которая по умолчанию должна быть false. Возможно, некоторая конфигурация устанавливает для этого значения значение true, поэтому lftp будет использовать EPSV вместо PASV. Проверьте свои настройки (set -a внутри lftp) и, если оно истинно (ожидаемо), установите его на false и попробуйте снова, в надежде, что тогда он будет использовать PASV вместо EPSV.

...