2010-04-01 33 views
7

Suponiendo que no puedo ejecutar algo como esto con la tela:tela y SVN contraseña

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

cómo es la forma correcta de pasar a la tela la contraseña de la línea de comandos interactiva a distancia?

El problema es que el repositorio está desprotegido como svn + ssh y no tengo una opción HTTP/HTTPS/SVN

Respuesta

7

Pruebe SSHkey. Le permite conectarse al servidor sin contraseña. En este caso, deberá configurar una sshkey entre su servidor remoto y el repositorio.

Al servidor remoto: Generar par de claves

$ ssh-keygen -t dsa 

Deje el passphase vacío! Esto generará 2 archivos

  • ~/.ssh/id_dsa (clave privada)
  • ~/.ssh/id_dsa.pub (clave pública)

A continuación, añadir el contenido en id_dsa .pub to ~/.ssh/authorized_keys en el servidor de repositorio.

Su servidor remoto podrá actualizar el árbol fuente sin ninguna contraseña requerida.

+0

con la esperanza de que alguien esté mirando ... - ¿no está dejando vacía la frase de contraseña de una mala idea? – rutherford

+1

sí, una frase de contraseña vacía no es buena en general, pero no es peor que poner la contraseña en una secuencia de comandos, y en este caso, si la frase de contraseña no estuviera vacía, necesitaría escribir una contraseña SSH en vez del control remoto contraseña para que no logre mucho si algo. –

0

Es posible que deba suministrar el usuario así? De lo contrario, es posible que tenga más suerte al exportar su repositorio y realizar una tarificación (localmente) para cargar + implementar en el servidor. Si ejecuta los comandos svn localmente, se le podrá solicitar su nombre de usuario y/o contraseña.

+0

He intentado suministrar el interruptor --username así, sin ninguna suerte. – hyperboreean

2

Tuvimos un problema similar hace un tiempo y de hecho propusimos una nueva función para Fabric, pero el desarrollador con el que hablamos sugirió esto en su lugar.

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

Esto le solicitará una contraseña cuando llegue el momento de que fabric ejecute este comando.

Creo que mostrará su contraseña en el registro de la tela, sin embargo, una mejor opción sería que SVN le pida la contraseña y la repita.

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

No consumo SVN sin embargo, así que me temo que no estoy seguro si eso es posible. ¡Espero que alguien más pueda ayudarme allí!

+0

Como mencioné anteriormente svn update --contraseña no funciona en absoluto, ya que esas opciones son solo para http/https. – hyperboreean

+0

Lo que estoy buscando es una manera automática de pasar la contraseña de forma interactiva. – hyperboreean

+0

Bueno, hacer eco de tus comandos en SVN podría valer la pena. Debería poder repetir la contraseña en el aviso interactivo, pero su millaje puede variar. – mac

2

Mi respuesta estándar para automatizar las líneas de comando interactivas es "usar Esperar", pero estás usando Python, por lo que lo refinaré ligeramente para "usar Pexpect".

Puede llevar un poco de pensamiento integrar Pexpect dentro de Fabric, o tal vez acabe recayendo solo en Pexpect para este caso en particular. Pero definitivamente es la forma en que iría.

0

Debería echar un vistazo al Fabric's env documentation. Allí dice que debe hacer algo como esto:

from fabric.api import env 

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

Espero que ayude!

3

Si yout simplemente quieren ocultar su contraseña de registro, puede usar algo como esto:

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"')