пароль от фабрики и svn - PullRequest
7 голосов
/ 01 апреля 2010

Предполагая, что я не могу запустить что-то подобное с Fabric:

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

как правильно передать в Fabric пароль для удаленной интерактивной командной строки?

Проблема в том, что репозиторий отмечен как svn + ssh, а у меня нет опции http / https / svn

Ответы [ 6 ]

7 голосов
/ 07 апреля 2010

Попробуйте SSHkey.Позволяет подключаться к серверу без пароля.В этом случае вам потребуется настроить sshkey между вашим удаленным сервером и репозиторием.

На удаленном сервере: сгенерируйте пару ключей

 $ ssh-keygen -t dsa

Оставьте парольную фазу пустой!Это создаст 2 файла

  • ~ / .ssh / id_dsa (закрытый ключ)
  • ~ / .ssh / id_dsa.pub (открытый ключ)

Затем добавьте содержимое в id_dsa.pub в ~ / .ssh / authorized_keys на сервере репо.

Ваш удаленный сервер сможет обновлять дерево исходного кода без ввода пароля.

3 голосов
/ 26 января 2011

Если вы просто хотите скрыть свой пароль от журнала, вы можете использовать что-то вроде этого:

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"')
2 голосов
/ 07 апреля 2010

Мой стандартный ответ для автоматизации интерактивных командных строк - «использовать Expect», но вы используете Python, поэтому я немного уточню это, чтобы «использовать Pexpect ».

Для интеграции Pexpect в Fabric может потребоваться некоторое время, или, возможно, в этом конкретном случае вы просто вернетесь к Pexpect в одиночку. Но я определенно так и поступлю.

2 голосов
/ 06 апреля 2010

У нас была проблема, похожая на эту, некоторое время назад, и мы фактически предложили новую функцию для Fabric, но разработчик, с которым мы говорили, предложил это вместо этого.

import getpass
password = getpass.getpass('Enter SVN Password: ')
run("svn update --password '%s'" % password)

Это запросит у вас пароль, когда придет время для выполнения этой команды фабрикой.

Я полагаю, что в журнале фабрики будет отображаться ваш пароль, поэтому лучшим вариантом будет заставить SVN запросить пароль и ввести его в него.

run('echo %s | svn update --password' % password)

Я не использую SVN, поэтому боюсь, что не уверен, возможно ли это. Я надеюсь, что кто-то еще может помочь там!

0 голосов
/ 08 апреля 2010

Вы должны взглянуть на документацию Fabric env Там говорится, что вы должны сделать что-то вроде этого:

from fabric.api import env

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

Надеюсь, это поможет!

0 голосов
/ 01 апреля 2010

Возможно, вам также потребуется указать пользователя? Если нет, то вам может повезти, если вы экспортируете репозиторий и создадите его (локально) tar для загрузки + развертывания на сервере. Если вы выполните команды svn локально, вы сможете получить запрос на ввод вашего имени пользователя и / или пароля.

...