从 bash 脚本运行 FTP 会话

从 bash 脚本运行 FTP 会话

我正在尝试编写一个 BASH 脚本来测试我拥有的 FTP 站点是否正在运行。因此,我希望 bash 脚本连接到 FTP 站点,使用虚拟帐户登录并将输出重定向到一个文件,然后我可以使用 grep 来确认登录是否成功。

(我知道不建议将用户/密码放在文件中,但是这个虚拟帐户被 chrooted 到一个空目录并且无法逃逸到 shell,而且无论如何我是唯一可以登录到 shell 提示符的用户。)

我在 Ubuntu 上使用 BASH shell。

我创建了一个名为“ftp-dummy”的文件,如下所示

username  
password

然后我根据提示做了以下操作:

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

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

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

我尝试删除 < 和文件名之间的空格 - 结果相同。

如果我将输出重定向到测试文件,则测试文件显示:

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

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

我也尝试使用 echo 并得到相同的结果:

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

我不明白为什么我没有看到正常的欢迎消息,或者为什么没有从文件中读取输入。任何帮助都将不胜感激。

谢谢,
亚当

答案1

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

你可以这样使用它:

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

或者更简单——使用 wget:

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

答案2

我以前遇到过使用 UNIX ftp 客户端重定向 STDIN 的问题。虽然我经常尝试解决这些问题,但我发现预计使其在许多情况下更加适用。

你也可以看看 nagios-plugins检查FTP,因为您可以将其取出并用于您的目的。通常,几乎不需要重新发明轮子。

具体回答你的问题,FTP 的网络资源中心文件将代表您提供身份验证详细信息。

答案3

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

FTP 服务器

ftp -n

然后您可以将命令(包括用户和密码)通过管道传输到 ftp。

相关内容