0

リポジトリのコピーを更新するスクリプトが必要です。「svnup」と入力すると、通常はパスワードの入力を余儀なくされますが、パスワードの入力を自動化するにはどうすればよいですか?

私が試したこと:

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は簡単な概要を提供します。DanielStarinによるJosephM.Reagleのソリューションでは、ログイン時にパスワードを1回だけ入力するだけで、パスワードを入力しても毎晩スクリプトを実行できます。

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 に答える