7

Fabricでこのようなものを実行できないと仮定します。

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

リモートインタラクティブコマンドラインのパスワードをFabricに渡す適切な方法はどのようになっていますか?

問題は、リポジトリがsvn + sshとしてチェックアウトされており、http / https/svnオプションがないことです。

4

6 に答える 6

7

SSHkeyを試してください。パスワードなしでサーバーに接続できます。この場合、リモートサーバーとリポジトリの間にsshkeyを設定する必要があります。

リモートサーバーで:キーペアを生成します

 $ ssh-keygen -t dsa

パスフェーズは空のままにします。これにより、2つのファイルが生成されます

  • 〜/ .ssh / id_dsa(秘密鍵)
  • 〜/ .ssh / id_dsa.pub(公開鍵)

次に、id_dsa.pubのコンテンツをリポジトリサーバーの〜/ .ssh/authorized_keysに追加します。

リモートサーバーは、パスワードを必要とせずにソースツリーを更新できます。

于 2010-04-07T15:13:26.957 に答える
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"')
于 2011-01-26T18:47:43.980 に答える
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を使用していませんので、それが可能かどうかはわかりません。他の誰かがそこで助けてくれることを願っています!

于 2010-04-06T09:41:44.490 に答える
2

インタラクティブなコマンドラインを自動化するための私の標準的な答えは「expectを使用する」ですが、Pythonを使用しているので、「 Pexpectを使用する」に少し改良します。

PexpectをFabric内に統合するには少し考える必要があるかもしれません。さもないと、この特定のケースではPexpectだけにフォールバックしてしまうかもしれません。しかし、それは間違いなく私が行く方法です。

于 2010-04-06T22:04:36.093 に答える
0

ユーザーにも提供する必要があるかもしれませんか?そうでない場合は、リポジトリをエクスポートし、サーバーにアップロードしてデプロイするために(ローカルで)tarを作成する方が幸運かもしれません。svnコマンドをローカルで実行すると、ユーザー名やパスワードの入力を求められるようになります。

于 2010-04-01T15:39:12.517 に答える
0

Fabricのenvドキュメントを確認する必要があります。次のようなものを作成する必要があると述べられています。

from fabric.api import env

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

それが役に立てば幸い!

于 2010-04-08T15:23:26.957 に答える