0

任何人都知道会出现什么问题?

#!/bin/bash -x

HOST='192.163.3.3'
USER='ftpuser'
PASSWD='apple'
Logfile=a.log

while :; do
ftp -n -p -v $HOST < example.script >> a.log
grep -qF "Connected" a.log &&
grep -qF "File successfully transferred" a.log && break
done

quote USER $USER
quote PASS $PASSWD

example.script 包含

 put example.txt

运行后它给出

 grep: a.log: No such file or directory
 grep: a.log: No such file or directory
                .
                .

example.script 和创建的 a.log 位于 /home 目录

a.log 包含

 Connected to 192.163.3.3.
 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
 220-You are user number 9 of 50 allowed.
 220-Local time is now 14:38. Server port: 21.
 220-This is a private system - No anonymous login
 220-IPv6 connections are also welcome on this server.
 220 You will be disconnected after 15 minutes of inactivity.
 Remote system type is UNIX.
 Using binary mode to transfer files.
 local: example.txt remote: example.txt
 530 You aren't logged in
 Passive mode refused.
 221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
 221 Logout.

为什么我无法登录?

  HOST='192.163.3.3'
  USER='ftpuser'
  PASSWD='apple'
  FILE='example.txt'
  Logfile=a.log

  ftp -n -p -v $HOST << SCRIPT_END >> a.log
  quote USER $USER
  quote PASS $PASSWD

  put $FILE
  SCRIPT_END

有了这个它可以工作,但为什么?会有什么区别?

4

3 回答 3

3

您的 FTP 守护程序拒绝被动模式文件传输(PASV 命令)。您必须在 Pure-FTPd 上启用被动模式传输。这个站点有关于如何做的很好的教程: 让被动 FTP 连接正确地通过防火墙工作- 向下滚动到设置 FTP 服务器(纯 FTPD)部分。

于 2012-11-28T14:00:06.690 回答
0

它抱怨处于被动模式,我会从命令中删除 -p 或允许被动 FTP。

-p 使用被动模式进行数据传输。允许在防火墙阻止从外部世界连接回客户端计算机的环境中使用 ftp。要求 ftp 服务器支持 PASV 命令。由于使用 PORT 传输模式的安全问题,现在这是所有客户端(ftp 和 pftp)的默认设置。该标志仅出于兼容性目的而保留,不再起作用。

于 2012-11-28T14:01:41.097 回答
0

我通常会发现创建一个netrc文件并使用它来至少启动我的 FTP 会话可以让我解决很多编写 ftp 会话脚本的问题。大多数 ftp 程序为您提供了使用备用netrc文件的选项,因此您无需在$HOME/.netrc.

我相信你只需要这样一个班轮:

machine 192.163.3.3 login ftpuser password apple

不幸的是,我无法测试它,因为我在任何地方都没有 ftp 设置。这里的一切都是scp// sshsftp这是一个示例 .netrc文件。

于 2012-11-28T14:20:03.403 回答