我已经尝试创建一个脚本,它将使用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。
发布于 2018-07-06 14:31:48
将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的意思
可以将ALLO命令发送到服务器,该服务器需要在传输发生之前为上传的数据保留必要的空间
所以,在ftp手册页中快速搜索之后,我找到了一个关闭它的命令。在添加了set ftp:use-allo false和epsv false之后,现在一切都很好。非常感谢:)
发布于 2019-01-09 14:29:07
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权限错误。
发布于 2018-07-06 12:39:04
虽然550 Permission denied.是对EPSV命令的奇怪响应,但它意味着服务器或介于两者之间的某个中间盒不理解EPSV命令(很可能是中间盒,因为对FEAT的响应显示EPSV受支持)。如果您使用内置的ftp命令而不是lftp,它可能会使用较旧的PASV命令(仅限IPv4),而不是较新的EPSV命令(支持IPv4+IPv6)。
根据the man page的说法,有一个默认设置为false的设置ftp:prefer-epsv。也许某些配置将此值设置为true,以便lftp使用EPSV而不是PASV。检查您的设置(lftp中的set -a),如果是真的(期望的),将其设置为false,然后重试,希望它会使用PASV而不是EPSV。
https://stackoverflow.com/questions/51200477
复制相似问题