fabric和svn密码

时间:2010-04-01 15:20:36

标签: python svn fabric

假设我不能用Fabric运行这样的东西:

run("svn update --password 'password' .")

如何以正确的方式传递给远程交互命令行的Fabric密码?

问题是repo被签出为svn + ssh并且我没有http / https / svn选项

6 个答案:

答案 0 :(得分:7)

尝试SSHkey。它允许您无需密码即可连接到服务器。 在这种情况下,您必须在远程服务器和存储库之间设置一个sshkey。

在远程服务器上:生成密钥对

 $ ssh-keygen -t dsa

将passphase留空! 这将生成2个文件

  • 〜/ .ssh / id_dsa(私钥)
  • 〜/ .ssh / id_dsa.pub(公钥)

然后,将id_dsa.pub中的内容追加到repo服务器上的〜/ .ssh / authorized_keys。

您的远程服务器将无需任何密码即可更新源树。

答案 1 :(得分:3)

如果您只想在日志中隐藏密码,可以使用以下内容:

from fabric.state import output

def xrun(command, hidden='', *args, **kwargs):
    old_state = output.running
    output.running = False
    print '[%s] run: %s' % (env.host_string, command)
    run(command + hidden, *args, **kwargs)
    output.running = command

xrun('svn update', '--password "your password"')

答案 2 :(得分:2)

我们遇到了类似于此问题的问题,实际上为Fabric提出了一项新功能,但我们采访过的开发人员建议使用它。

import getpass
password = getpass.getpass('Enter SVN Password: ')
run("svn update --password '%s'" % password)

当结构运行此命令时,这将提示您输入密码。

我相信会在结构日志中显示您的密码,因此更好的选择是让SVN提示您输入密码并将密码反映到其中。

run('echo %s | svn update --password' % password)

我不使用SVN,所以我担心我不确定这是否可行。我希望其他人可以帮助那里!

答案 3 :(得分:2)

我自动化交互式命令行的标准答案是“使用Expect”,但是你使用的是Python,所以我会稍微改进一下“使用Pexpect”。

可能需要一些考虑将Pexpect集成到Fabric中,或者您可能最终会因为这种特殊情况而单独回到Pexpect。但这绝对是我的方式。

答案 4 :(得分:0)

您可能还需要为用户提供服务?如果没有,您可能会更好地导出您的仓库并在服务器上上传+部署它(本地)的tar。如果您在本地运行svn命令,则可以提示您输入用户名和/或密码。

答案 5 :(得分:0)

你应该看一下Fabric's env documentation。有人说你应该做这样的事情:

from fabric.api import env

env.user = 'your_user'
env.password = 'your_password'

希望它有所帮助!