从bash脚本运行FTP会话

我正在尝试编写一个BASH脚本来testing我拥有的FTP站点是否正在运行。 因此,我想让bash脚本连接到FTP站点,用一个虚拟帐户login并将输出redirect到一个文件,然后我可以grep来确认login成功。

(我知道把用户/传入一个文件不build议,但这个虚拟帐户被chrooted到一个空目录,不能逃到shell,在任何情况下,我是唯一的用户可以login到shell提示。)

我在Ubuntu上使用BASH shell。

我创build了一个名为“ftp-dummy”的文件,看起来像这样

username password 

然后我从提示符中做了这个:

 adam$ ftp my.ftpsite.com < ftp-dummy 

这不起作用 – 我没有看到正常的欢迎消息,输出是:

 Password:Name (my.ftpsite.com:adam) : 

我试图删除<和文件名之间的空间 – 相同的结果。

如果我将输出redirect到一个testing文件,testing文件显示:

 Name (my.ftpsite.com:adam): ?Invalid command 

我仍然在STDOUT上得到密码提示

我也尝试使用回声,并得到相同的结果:

 echo -e "username \npassword \n" | ftp my.ftpsite.com 

我不明白为什么我没有看到正常的欢迎消息或为什么input不被从文件中读取。 任何帮助将非常感激。

谢谢,
亚当

使用脚本的ftp客户端,如lftp。

你这样使用它:

 lftp -u login,pass host.com -e "get file.txt;exit " 

甚至更简单 – 使用wget:

 wget -O file ftp://login:[email protected]/file.txt 

我遇到过使用UNIX ftp客户端redirectSTDIN的问题。 虽然我会经常尝试通过它们,但我发现在许多情况下都会更好地适应。

你也可以看看nagios-plugins check_ftp ,因为你可能会把它拉出来用于你的目的。 通常,几乎没有必要重新发明轮子。

要具体回答你的问题,FTP的netrc文件将代表你提供validation细节。

ftp上有一个标志,可以用来在发送用户命令时停止自动密码请求。

男子ftp

ftp -n

然后,您可以将您的命令(包括用户和通行证)传送给ftp。