我正在尝试编写脚本以登录到我用于工作的单个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()
答案 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
个文件。