无法登录到ftp服务器

时间:2012-11-28 13:51:17

标签: bash shell unix

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

#!/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

这有效但为什么?会有什么区别?

3 个答案:

答案 0 :(得分:3)

您的FTP守护程序拒绝被动模式文件传输(PASV命令)。您必须在Pure-FTPd上启用被动模式传输。这个网站有很好的教程如何做到这一点: Getting passive FTP connections to work through a firewall properly - 向下滚动到设置FTP服务器(Pure-FTPD)部分。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我经常发现创建一个netrc文件并使用它至少启动我的FTP会话让我解决了脚本ftp会话的很多问题。大多数ftp程序允许您选择使用备用 netrc 文件,因此您无需在$HOME/.netrc设置一个。

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

machine 192.163.3.3 login ftpuser password apple

不幸的是,我无法测试它,因为我没有在任何地方设置ftp。这里的所有内容都是scp / ssh / sftp。这是example .netrc个文件。