ткань и пароль svn

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

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

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

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


person hyperboreean    schedule 01.04.2010    source источник


Ответы (6)


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

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

 $ ssh-keygen -t dsa

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

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

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

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

person Bird    schedule 07.04.2010
comment
в надежде, что кто-то наблюдает... - не является ли пустая фраза-пароль плохой идеей? - person rutherford; 24.11.2012
comment
да, пустая фраза-пароль в общем-то нехороша - но это не хуже, чем прописать пароль в скрипте - и в этом случае, если бы фраза-пароль была не пустой, вам бы пришлось скриптом вводить парольную фразу SSH вместо удаленного пароля так что это не принесет многого, если что-нибудь. - person Alex Dupuy; 09.05.2013

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

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"')
person Luka Zakrajšek    schedule 26.01.2011

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

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

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

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

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

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

person mac    schedule 06.04.2010
comment
Как я уже говорил выше, svn update --password вообще не работает, так как эти опции предназначены только для http/https. - person hyperboreean; 06.04.2010
comment
То, что я ищу, - это автоматический способ передачи пароля в интерактивном режиме. - person hyperboreean; 06.04.2010
comment
Что ж, повторение ваших команд в SVN, возможно, все же стоит попробовать. Вы должны иметь возможность повторить пароль в интерактивной подсказке, но ваш пробег может отличаться. - person mac; 07.04.2010

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

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

person Zac Thompson    schedule 06.04.2010

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

person Alex Jillard    schedule 01.04.2010
comment
Я также пытался указать переключатель --username, но безуспешно. - person hyperboreean; 01.04.2010

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

from fabric.api import env

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

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

person mpeterson    schedule 08.04.2010