2010-04-01 28 views
7

Zakładając, że nie mogę uruchomić coś podobnego z tkaniny:tkaniny i svn hasło

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

jaki jest właściwy sposób, aby przejść do Fabric hasło do zdalnego interaktywnej linii poleceń?

Problemem jest to, że repo jest wyrejestrowany jako svn + ssh i nie mam opcji HTTP/HTTPS/svn

Odpowiedz

7

Spróbuj SSHkey. Pozwala na łączenie się z serwerem bez hasła. W takim przypadku będziesz musiał ustawić sshkey pomiędzy serwerem zdalnym a repo.

Na zdalnym serwerze: Generowanie pary kluczy

$ ssh-keygen -t dsa 

Pozostawić passphase pusty! To wygeneruje 2 pliki

  • ~/.ssh/id_dsa (klucz prywatny)
  • ~/.ssh/id_dsa.pub (klucz publiczny)

Następnie dołączyć zawartość w id_dsa .pub do ~/.ssh/authorized_keys na serwerze repo.

Twój zdalny serwer będzie mógł zaktualizować drzewo źródłowe bez żadnego hasła.

+0

w nadziei, że ktoś ogląda ... - nie pozostawia pustego hasła pustym pomysłem? – rutherford

+1

tak, puste hasło nie jest ogólnie dobre - ale nie jest gorsze niż umieszczanie hasła w skrypcie - iw tym przypadku, jeśli hasło nie było puste, konieczne byłoby wprowadzenie skryptu wprowadzającego hasło SSH zamiast zdalnego hasło, więc niewiele by się to udało. –

0

Być może trzeba dostarczyć użytkownikowi, jak również? Jeśli nie, możesz mieć większe szanse na wyeksportowanie repo i zrobienie tara (lokalnie) w celu przesłania + wdrożenia na serwerze. Jeśli uruchomisz komendy svn lokalnie, będziesz mógł uzyskać monit o podanie nazwy użytkownika i/lub hasła.

+0

próbowałam dostarczanie przełącznik --username jak również, bez powodzenia. – hyperboreean

2

Po powrocie mieliśmy podobny problem i zaproponowaliśmy nową funkcję dla Fabric, ale programista, z którym rozmawialiśmy, zasugerował to.

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

Spowoduje to wyświetlenie monitu o podanie hasła, gdy nadejdzie czas, aby tkanina uruchomiła to polecenie.

Wierzę, że będzie wyświetlać twoje hasło w dzienniku tkanin, jednak, więc lepszym rozwiązaniem byłoby, aby SVN poprosił cię o hasło i powtórzył hasło do niego.

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

Nie używam jednak SVN, więc obawiam się, że nie jestem pewien, czy to możliwe. Mam nadzieję, że ktoś inny może w tym pomóc!

+0

Jak już wspomniałem powyżej, aktualizacja svn - hasło nie działa, ponieważ ta opcja dotyczy tylko http/https. – hyperboreean

+0

To, czego szukam, to automatyczny sposób przekazywania hasła interaktywnie. – hyperboreean

+0

Cóż, powtarzanie poleceń do SVN może nadal być warte podjęcia decyzji. Powinieneś być w stanie powtórzyć hasło w interaktywnym monitorze, ale twój przebieg może się różnić. – mac

2

Moja standardowa odpowiedź na zautomatyzowanie interaktywnych linii poleceń to "używaj Expect", ale używasz Pythona, więc delikatnie udoskonalę to, aby "użyć Pexpect".

Może zająć trochę czasu, aby zintegrować Pexpect w obrębie Fabric, a może po prostu wrócisz do Pexpect sam w tym konkretnym przypadku. Ale na pewno tak pojadę.

0

Powinieneś rzucić okiem na Fabric's env documentation. Podaje się, że powinieneś zrobić coś takiego:

from fabric.api import env 

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

Mam nadzieję, że pomoże!

3

Jeśli yout prostu chcą ukryć swoje hasło z dziennika, można użyć coś takiego:

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