代码之家  ›  专栏  ›  技术社区  ›  user1029968

正在为结构rsync_project()函数设置密码

  •  1
  • user1029968  · 技术社区  · 12 年前

    我想以某种方式传递的用户密码 rsync_project() 函数(它是常规rsync命令的包装器) 织物 图书馆

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

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

    2 回复  |  直到 12 年前
        1
  •  2
  •   Pedro Romano    12 年前

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

        2
  •  1
  •   cjfont    11 年前

    使用Pedro的答案中的公钥身份验证是自动使用的理想方式 远程同步 然而,在某些情况下(比如我的情况),您会将密码作为连接到目标主机的唯一手段。

    YMMV,但我的解决方案是实现以下运行的函数 远程同步 通过 预料 要键入密码:

        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,所以这只能作为最后的手段,并且来自可信的环境。