0

我需要一个脚本来更新我的存储库副本。当我键入“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 部门发送一个公钥。当我第一次访问 repo 时。避免在我正在处理的 ssh+svn 中输入密码可以使用 ssh-agent 来完成。此链接: http: //mah.everybody.org/docs/ssh提供了一个简单的概述。Daniel Starin 提出的解决方案 Joseph M. Reagle 只要求我在登录时输入一次密码,尽管输入了密码,但我每晚都可以执行我的脚本。

4

2 回答 2

1

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

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

于 2013-02-05T08:19:02.670 回答
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 和。

于 2013-01-03T01:44:48.220 回答