我需要一个更新我的存储库副本的脚本。当我输入“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只需要在登录时输入我的密码,允许我每晚都执行我的脚本,尽管密码输入。
答案 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总和。