使用密码输入自动执行`svn up`

时间:2013-01-02 22:07:49

标签: python svn pexpect

我需要一个更新我的存储库副本的脚本。当我输入“svn up”时,我通常被迫输入密码,如何自动输入密码?

我尝试了什么:

import pexpect, sys, re

pexpect.run("svn cleanup")

child = pexpect.spawn('svn up')
child.logfile = sys.stdout

child.expect("Enter passphrase for key \'/home/rcompton/.ssh/id_rsa\':")

child.sendline("majorSecurityBreach")

matchanything = re.compile('.*', re.DOTALL)

child.expect(matchanything)

child.close()

但它似乎没有更新。

编辑:如果重要,我可以使用child.interact()

更新我的存储库
import pexpect, sys, re

pexpect.run("svn cleanup")

child = pexpect.spawn('svn up')
child.logfile = sys.stdout

i = child.expect("Enter passphrase for key \'/home/rcompton/.ssh/id_rsa\':")

child.interact()

允许我输入密码并开始更新。但是,无论如何我最终都会出错。

-bash-3.2$ python2.7 exRepUpdate.py 
Enter passphrase for key '/home/rcompton/.ssh/id_rsa':  

At revision 4386.
At revision 4386.
Traceback (most recent call last):
  File "exRepUpdate.py", line 13, in <module>
    child.interact()
  File "build/bdist.linux-x86_64/egg/pexpect.py", line 1497, in interact
  File "build/bdist.linux-x86_64/egg/pexpect.py", line 1525, in __interact_copy
  File "build/bdist.linux-x86_64/egg/pexpect.py", line 1515, in __interact_read
OSError: [Errno 5] Input/output error

编辑好吧我找到了明文密码输入的方​​法。我遗漏的一个重要细节(老实说,我认为我不需要,因为这似乎是一个简单的问题)是我必须向我们的IT部门发送一个公钥。当我第一次访问回购时。在我正在处理的ssh + svn中避免使用ssh-agent来完成密码输入。此链接:http://mah.everybody.org/docs/ssh提供了简单的概述。解决方案Joseph M. Reagle通过Daniel Starin只需要在登录时输入我的密码,允许我每晚都执行我的脚本,尽管密码输入。

2 个答案:

答案 0 :(得分:1)

如果您不想多次输入密码,但仍有安全的解决方案,则可以使用 ssh-agent 来保留密钥密码短语一段时间。如果您使用默认私钥,只需键入ssh-add并在询问时提供密码。

有关ssh-add命令用法的更多详细信息,请访问:linux.die.net/man/1/ssh-add

答案 1 :(得分:0)

你应该只使用带公钥的ssh。

如果没有,您只需在~/.subversion/auth/svn.simple/中创建一个包含以下内容的新文件:

K 8
passtype
V 6
simple
K 999
password
V 7
password_goes_here
K 15
svn:realmstring
V 999
<url> real_identifier
K 8
username
V 999
username_goes_here
END

999数字是下一行的长度(减去\n)。文件名应该是领域字符串的MD5总和。