lfp 550 разрешение отклонено

Я пытался создать скрипт, который будет загружать некоторый файл на 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.


person Vasil Ivanov    schedule 05.07.2018    source источник
comment
Что произойдет, если вы просто напишете встроенную команду Debian?   -  person Robert Harvey    schedule 06.07.2018
comment
Я использую команду «mv» из lfpt, потому что по спецификации должен загрузить файл, и когда он будет завершен, я должен переименовать его. Например - поставить Xsome_file_name -O /some_remote_dir/ и после этого cd /some_remote_dir/; mv Xsome_file_name some_file_name. Также я не нашел способа загрузить файл с помощью одной строчной команды, которая загружает файл в какой-либо удаленный каталог, используя только ftp.   -  person Vasil Ivanov    schedule 06.07.2018


Ответы (3)


после добавления 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 теперь все в порядке. Большое спасибо :)

person Vasil Ivanov    schedule 06.07.2018

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.

person Savin-Max    schedule 09.01.2019

Хотя 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.

person Steffen Ullrich    schedule 06.07.2018