Python 正在为fabric rsync_project()函数输入密码

Python 正在为fabric rsync_project()函数输入密码,python,rsync,fabric,Python,Rsync,Fabric,我想从Fabric库中传递rsync_project()函数(即常规rsync命令的包装器)的用户密码 我发现rsync命令的选项--password file=file要求将密码存储在文件中。这可能会以某种方式起作用,但我正在寻找更好的解决方案,因为我(暂时)将密码以纯文本形式存储在数据库中 请向我提供如何使用它的任何建议。如果rsync使用ssh作为远程shell传输是一个选项,并且您可以为用户设置公钥身份验证,这将为您提供一种安全的rsync方式,而无需输入密码。使用Pedro回答中的公钥

我想从Fabric库中传递rsync_project()函数(即常规rsync命令的包装器)的用户密码

我发现rsync命令的选项--password file=file要求将密码存储在文件中。这可能会以某种方式起作用,但我正在寻找更好的解决方案,因为我(暂时)将密码以纯文本形式存储在数据库中


请向我提供如何使用它的任何建议。

如果rsync使用ssh作为远程shell传输是一个选项,并且您可以为用户设置公钥身份验证,这将为您提供一种安全的rsync方式,而无需输入密码。

使用Pedro回答中的公钥身份验证是自动使用rsync的理想方式,但是在某些情况下(如我的情况),您只能使用密码连接到目标主机

YMMV,但我的解决方案是通过expect输入密码来实现以下运行rsync的功能:

    def run_rsync(source, target, excludes=[]):
        excludes = "".join(map(lambda e: " --exclude="+e, excludes))
        local("expect -c 'spawn rsync -avz"+excludes+" --force -e \"ssh -oStrictHostKeyChecking=no -p "+env.port+"\" "+source+" "+target+"; expect password; send \""+env.password+"\\n\"; interact'")

请注意,此方法是不安全的,因为在执行命令时,密码将输出到STDOUT,因此这只能作为最后手段使用,并且只能从受信任的环境中使用。

是的,您是对的。对我来说很好-不再需要密码了。非常感谢。