脚本化交互式FTP登录脚本

时间:2018-12-19 19:54:34

标签: python bash ftp

我正在尝试编写脚本以登录到我用于工作的单个ftp网站上的30个以上帐户中的1个。

我想要看到的行为:

$ 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会话具有交互性。

我的下一步是尝试卷曲:

curl ftp://user:password@ftp.someplace.com

这会执行并以返回代码0退出。

最后,我以一种可以通过脚本调用的方法从CLI尝试ftp:

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

这会执行并以返回代码0退出。

是否可以编写脚本来执行此操作?我希望在python中使用它,但我可以进行bash子进程调用。在这一点上,我正在看一些复杂的.netrc条目,但感觉就像是要钻进一个兔子洞。 感谢您的帮助!

****************编辑后与PYTHON实施********************

Python中的以下2行:

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

1 个答案:

答案 0 :(得分:2)

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

-e cmd     execute the command just after selecting the server

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

open ftp://user1:password@ftp.someplace.com

当您想以user1身份连接时:

lftp -e 'source user1.lftp'

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

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

然后就这么简单:

$ lftp-open user1

很明显,这样做的缺点,或者可能是任何一种自动ftp登录的方法,都要求以明文形式存储密码,因此,您需要确保对密码设置正确的读取权限。 *.lftp个文件。