用Python控制rsync?

2024-04-27 03:02:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直想编写一个python脚本,它将按顺序运行rsync的几个实例,以便将数据备份到另一台计算机。

目前我只有这个文本文件和我使用的命令,我刚刚复制粘贴到终端,这似乎有点傻。

我希望能够使用python为我做这件事。我非常模糊地知道如何使用subprocess.popen,但是我不知道如何让python直接与rsync交互,比如为我输入密码。python能做到吗?

类似于:

if theProccess.proccessResponse == "Password:" :
    theProccess.respond(string)

或者我能做的最好的事情就是拥有它,或者甚至是bash脚本,只是按顺序运行rsyncs,然后一遍又一遍地输入我的密码?

提前谢谢。


Tags: 实例命令脚本终端密码if顺序计算机
3条回答

如果您希望与一般的子流程交互,可以使用pexpect,如其他地方所述。但是对于您的特定情况,假设rsync是通过ssh运行的(默认),那么您可能需要考虑在两个主机之间建立一个passwordless ssh连接,这样就不需要输入密码。这是一个key-based solution,比在源代码中存储密码安全得多。

Here's a blogger他讨论了您的确切问题并决定使用无密码ssh。

我使用rsync备份所有客户的网站。cron会触发一个脚本,由于每个客户机的需求不同,它会为每个客户机使用makefile。

不要执行输入密码的操作,而是使用ssh-keygen创建一个公钥/私钥对,并将公钥放在远程计算机上。这给你安全,没有密码连接。这也意味着您不必向世界公开rsync端口。当你通过了这方面的学习曲线后(而且不太陡峭),ssh绝对是你的朋友。

有一个很棒的Python模块,由Colin Stewart编写,名为RSyncBackup,鲜为人知,几乎没有文档,但非常有用。

默认情况下,它不包含在rsync命令中包含密码的任何方法,因此我修改了模块并在这篇博客文章中讨论了它:http://technofart.blogspot.com/2012/02/rsync-controlled-by-python.html

我的修改模块的链接可以在我文章的下载部分找到。

基于密钥的解决方案也是一个好主意。此外,许多rsync实现都会寻找rsync_PASSWORD环境变量,您可以设置该变量。如果您的环境变量对其他用户可见,请小心。

相关问题 更多 >