lftp 550权限被拒绝

lftp 550权限被拒绝,ftp,debian,lftp,Ftp,Debian,Lftp,我试图创建一个脚本,使用lftp将一些文件上传到ftp服务器,但到目前为止没有任何运气。如果我在debian中使用内置ftp命令,我会成功地连接并放置文件。 以下是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

我试图创建一个脚本,使用lftp将一些文件上传到ftp服务器,但到目前为止没有任何运气。如果我在debian中使用内置ftp命令,我会成功地连接并放置文件。 以下是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
lftp xxx.xxx.xxx.xxxx-e“put-O/out/some\u file\u name”-d
----使用~/.netrc中的用户“user01”和密码
----正在解析主机地址。。。
----找到1个地址:xxx.xxx.xxx.xxxx
----连接到xxx.xxx.xxx.xxxx(xxx.xxx.xxx.xxxx)端口21
壮举

550权限被拒绝。
是对
EPSV
命令的奇怪响应,这意味着服务器或介于两者之间的某个中间箱不理解
EPSV
命令(可能是一个中间箱,因为对
FEAT
的响应显示了所支持的
EPSV
)。如果使用内置的
ftp
命令而不是
lftp
,则可能会使用较旧的
PASV
命令(仅限IPv4),而不是较新的
EPSV
命令(支持IPv4+IPv6)


根据需要,有一个设置
ftp:preferredepsv
,它应该默认为
false
。可能某些配置正在将此值设置为true,以便
lftp
将使用
EPSV
而不是
PASV
。检查您的设置(
set-a
在lftp中),如果设置为真(预期),请将其设置为
false
,然后重试,希望在添加
set ftp:passive mode true
set ftp:preference EPSV false
而不是/etc/lftp.conf之后,它将使用
PASV
而不是
EPSV

来更改错误

<--- 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
PWD
第一类
PASV
ALLO 710
存储输出/我的文件名
--->流产
put:访问失败:550权限被拒绝。(/out/my_文件名)
----关闭中止的数据套接字
----闭合控制插座
好吧,我明白ALLO的意思

ALLO命令可以发送到服务器,该服务器在传输之前需要为上传的文件保留必要的空间

所以在ftp手册页中快速搜索之后,我找到了一个关闭它的命令。添加
set ftp后:使用allo-false
epsv-false
现在一切正常。非常感谢:)

设置ftp:使用allo false;设置ftp:被动模式true;设置ftp:首选epsv false;镜像-R{local dir}{remote dir}“-u{username},{password}{host}


使用此单一命令将文件从本地同步到服务器,无需550权限错误。

如果只编写内置debian命令的脚本,会发生什么情况?我使用lfpt的“mv”命令,因为根据规范必须上载文件,完成后我必须重命名它。例如,“将Xsome_file_name-O/some_remote_dir/”放在“cd/some_remote_dir/;mv Xsome_file_name some_file_name”之后。此外,我没有找到一种方法来上传一个文件使用一行命令,上传文件到一些远程目录只使用ftp。