2010-04-01 9 views
7

En supposant que je ne peux pas courir quelque chose comme ça avec du tissu:tissu et svn mot de passe

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

comment est la bonne façon de passer au tissu le mot de passe pour la ligne de commande interactive à distance?

Le problème est que la prise en pension est vérifié comme svn + ssh et je n'ai pas une option http/https/svn

Répondre

7

Essayez SSHkey. Il vous permet de vous connecter au serveur sans mot de passe. Dans ce cas, vous devrez configurer un sshkey entre votre serveur distant et le repo.

au serveur distant: Générer paire de clés

$ ssh-keygen -t dsa 

Laissez le passphase vide! Cela va générer 2 fichiers

  • ~/.ssh/id_dsa (clé privée)
  • ~/.ssh/id_dsa.pub (clé publique)

Ensuite, ajoutez le contenu en id_dsa .pub à ~/.ssh/authorized_keys au serveur repo.

Votre serveur distant pourra mettre à jour l'arborescence source sans mot de passe requis.

+0

dans l'espoir que quelqu'un regarde ... - ne pas laisser la phrase secrète vide une mauvaise idée? – rutherford

+1

oui, une phrase secrète vide n'est pas bonne en général - mais ce n'est pas pire que de mettre le mot de passe dans un script - et dans ce cas, si la phrase secrète n'est pas vide, vous devrez saisir le mot de passe SSH au lieu de la télécommande mot de passe donc il ne ferait pas grand-chose si quelque chose. –

0

Vous pourriez avoir besoin de fournir à l'utilisateur ainsi? Si ce n'est pas le cas, vous aurez peut-être plus de chance d'exporter votre dépôt et d'en faire un fichier tar (localement) pour le télécharger + le déployer sur le serveur. Si vous exécutez les commandes svn localement, vous serez invité à entrer votre nom d'utilisateur et/ou votre mot de passe.

+0

J'ai essayé fournir l'interrupteur --username ainsi, sans aucune chance. – hyperboreean

2

Nous avons eu un problème similaire à cela il y a quelque temps et avons proposé une nouvelle fonctionnalité pour Fabric, mais le développeur à qui nous avons parlé a suggéré cela à la place.

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

Ceci vous demandera un mot de passe lorsque vient le temps d'exécuter cette commande.

Je crois que cela affichera votre mot de passe dans le journal du tissu, cependant, une meilleure option serait d'obtenir SVN de vous demander le mot de passe et d'y renvoyer le mot de passe. Je n'utilise pas SVN, donc je crains de ne pas savoir si c'est possible. J'espère que quelqu'un d'autre peut aider là-bas!

+0

Comme je l'ai indiqué ci-dessus svn update --password ne fonctionne pas du tout, puisque cette option est pour http/https seulement. – hyperboreean

+0

Ce que je cherche est une manière automatique de passer le mot de passe de manière interactive. – hyperboreean

+0

Eh bien, l'écho de vos commandes dans SVN pourrait encore valoir la peine. Vous devriez pouvoir faire écho au mot de passe dans l'invite interactive, mais votre kilométrage peut varier. – mac

2

Ma réponse standard pour l'automatisation des lignes de commande interactives est "utiliser Expect", mais vous utilisez Python, donc je vais affiner légèrement cela pour "utiliser Pexpect".

L'intégration de Pexpect dans Fabric peut prendre un peu de temps, ou peut-être que vous finirez par retomber dans Pexpect seul pour ce cas particulier. Mais c'est définitivement la façon dont j'irais.

0

Vous devriez jeter un oeil à la Fabric's env documentation. Il indique que vous devriez faire quelque chose comme ceci:

from fabric.api import env 

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

Espérons que ça aide!

3

Si yout veulent juste cacher votre mot de passe journal, vous pouvez utiliser quelque chose comme ceci:

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