2010-04-01 20 views
7

Partendo dal presupposto che non posso correre qualcosa di simile con tessuto:tessuto e la password svn

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

come è il modo corretto per passare al tessuto la password per la linea di comando interattivo a distanza?

Il problema è che il repo è stato estratto come svn + ssh e non ho un HTTP/HTTPS/svn opzione

risposta

7

Provare SSHkey. Ti permette di connetterti al server senza password. In questo caso, dovrai configurare un tasto ssh tra il tuo server remoto e il repository.

Al server remoto: Genera coppia di chiavi

$ ssh-keygen -t dsa 

Lasciare la passphrase vuoto! Questo genererà 2 file

  • ~/.ssh/id_dsa (chiave privata)
  • ~/.ssh/id_dsa.pub (chiave pubblica)

Quindi, aggiungere il contenuto di id_dsa .pub su ~/.ssh/authorized_keys sul server di pronti contro termine.

Il server remoto sarà in grado di aggiornare l'albero dei sorgenti senza alcuna password richiesta.

+0

nella speranza che qualcuno stia guardando ... - non sta lasciando la passphrase vuota una cattiva idea? – rutherford

+1

sì, una passphrase vuota non è buona in generale - ma non è peggio che inserire la password in uno script - e in questo caso, se la passphrase non fosse vuota, avresti bisogno di script inserendo la passphrase SSH invece del telecomando password quindi non sarebbe molto utile se non altro. –

0

Potrebbe essere necessario fornire all'utente come bene? In caso contrario, si potrebbe avere una migliore fortuna ad esportare il repository e fare un tar di questo (localmente) per caricare + distribuire sul server. Se esegui i comandi svn localmente, ti verrà chiesto il nome utente e/o la password.

+0

Ho provato fornendo l'interruttore --username così, senza alcuna fortuna. – hyperboreean

2

Abbiamo avuto un problema simile a questo un po 'indietro e in realtà proposto una nuova funzionalità per Fabric, ma lo sviluppatore con cui abbiamo parlato ha suggerito questo invece.

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

Questo richiederà una password quando arriva il momento in cui fabric eseguirà questo comando.

Credo che visualizzerà la password nel registro del tessuto, tuttavia, quindi un'opzione migliore sarebbe quella di ottenere SVN per richiedere la password ed echo la password in esso.

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

Tuttavia, non uso SVN, quindi temo di non essere sicuro che sia possibile. Spero che qualcun altro possa aiutarci!

+0

Come ho detto sopra svn update - password non funziona affatto, dal momento che le opzioni sono solo per http/https. – hyperboreean

+0

Quello che sto cercando è un modo automatico per passare la password in modo interattivo. – hyperboreean

+0

Bene, l'eco dei tuoi comandi in SVN potrebbe comunque valere la pena. Dovresti essere in grado di richiamare la password nel prompt interattivo, ma il tuo chilometraggio può variare. – mac

2

La mia risposta standard per l'automazione delle righe di comando interattive è "use Expect", ma stai usando Python, quindi mi limiterò a definire "use Pexpect".

Potrebbe volerci un po 'di tempo per integrare Pexpect in Fabric, o forse finirai per ricadere su Pexpect da solo in questo caso particolare. Ma è sicuramente il modo in cui vorrei andare.

0

Dovresti dare un'occhiata allo Fabric's env documentation. Si afferma che si dovrebbe fare qualcosa di simile:

from fabric.api import env 

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

Spero che aiuti!

3

Se yout vogliono solo nascondere la password dal registro, è possibile utilizzare qualcosa di simile:

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