lftp 550权限被拒绝

时间:2018-07-05 22:03:16

标签: ftp debian lftp

我尝试创建一个脚本,该脚本将使用lftp将某些文件上传到ftp服务器,但到目前为止没有任何运气。如果我在debian中使用了build in 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

您可以看到我正在使用.netrc文件中存储的用户名和密码。我有另一个连接到同一服务器的脚本,但是该脚本上载文件并再次使用lftp在远程ftp文件夹中重命名它们。有人可以帮忙解释一下为什么我不能使用lfpt但可以使用ftp做到这一点。

3 个答案:

答案 0 :(得分:1)

虽然550 Permission denied.是对EPSV命令的奇怪响应,但这意味着服务器或介于两者之间的某个中间盒无法理解EPSV命令(很可能是中间盒,因为对{ {1}}显示FEAT受支持)。如果您使用内置的EPSV命令而不是ftp,则可能会使用较旧的lftp命令(仅IPv4)而不是较新的PASV命令(支持IPv4 + IPv6)

根据the man page,有一个设置EPSV应该默认为ftp:prefer-epsv。也许某些配置将此值设置为true,以便false将使用lftp而不是EPSV。检查您的设置(在lftp中的PASV),如果它是正确的(预期),请将其设置为set -a,然后重试,希望它随后将使用false而不是{{1 }}。

答案 1 :(得分:0)

set ftp:passive-mode trueset 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的含义

  

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

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

答案 2 :(得分:0)

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个权限错误。