python - 编写交互式 FTP 登录脚本

标签 python bash ftp

我正在尝试编写一个脚本来登录我用于工作的单个 ftp 站点上的 30 多个帐户之一。

我希望看到的行为:

$ ftp ftp.someplace.com
connected blah blah
220 blah blah ready...
Name (something): username
Password: <enter password>
couple lines saying successful login
ftp> <manually enter commands such as ls, cd, get, put, etc>

我已经在 Python 中使用 FTP.connect()/.login() 尝试过使用 ftplib,但我在 ftplib 中没有发现任何东西会放弃控制并使 ftp session 具有交互性。

我的下一步是尝试curl:

curl ftp://user:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dcacbdafafabb3aeb89cbaa8acf2afb3b1b9acb0bdbfb9f2bfb3b1" rel="noreferrer noopener nofollow">[email protected]</a>

执行并退出,返回代码为 0。

最后,我尝试从 CLI 进行 ftp,方法是从脚本调用它:

ftp ftp.someplace.com <<END_SCRIPT
> quote USER username
> quote PASS password
> END_SCRIPT

执行并退出,返回代码为 0。

有没有办法编写脚本来做到这一点?我更喜欢在 python 中这样做,但我可以进行 bash 子进程调用。此时,我正在查看一些复杂的 .netrc 条目,但我感觉我正在掉入兔子洞。 感谢您的帮助!

****************用 Python 实现回答后进行编辑****************

以下 2 行在 python 中起作用:

 process = subprocess.Popen("lftp -e ls -u {0},{1} ftp.someplace.com".format(username,password), shell=True)
 output, error = process.communicate()

最佳答案

会安装 lftp可行吗?它有一个标志 -e,可能适合您的需求:

-e cmd     execute the command just after selecting the server

执行命令后,它保持交互状态。您可以使用以下方法,其中每个帐户都有一个具有以下模式的文件(将此文件命名为 user1.lftp:

open ftp://user1:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2e5e4f5d5d59415c4a6e485a5e005d41434b5e424f4d4b004d4143" rel="noreferrer noopener nofollow">[email protected]</a>

当您想以 user1 身份连接时:

lftp -e 'source user1.lftp'

这将使您进入可以执行ftp命令的提示符。您可以通过在 .bashrc 中定义如下函数来使其更方便:

lftp-open() {
    lftp -e "source $1.lftp"
}

然后就很简单了:

$ lftp-open user1

显然,这种方法或任何自动化 ftp 登录方法的缺点是需要以明文形式存储密码,因此您需要确保拥有适当的读取权限在 *.lftp 文件上设置。

关于python - 编写交互式 FTP 登录脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53858317/

相关文章:

c++ - 将 Boost Python 与 Weak Ptr 一起使用?

python - Flask init-db 没有这样的命令

python - JModelica:更改循环迭代变量而不重新编译

bash - 使用 sed 从多行中提取引用值

linux - 从 bash 脚本文件中查找没有目录和扩展名的文件名

php - 如何在 PHP 中通过 ftp 上传文件?

linux - ftp 将更改的文件推送到服务器

python - 打印解压缩的列表对象返回空列表

bash - 如何从awk输出颜色格式

python - 确认 Python 2.6 ftplib 不支持 Unicode 文件名?备择方案?