2009-05-08 5 views
2

je dois écrire un script shell pour être programmé pour exécuter tous les jours pour sauvegarder un répertoire en utilisant Mercurial. J'ai fait la plupart des cas d'utilisation, sauf que je peux trouver un moyen de faire une connexion automatique pendant que le script est en cours d'exécution.connexion de traitement dans un script de sauvegarde automatique

for REPOSITORY in [email protected] 
do 
    cd $REPOSITORY 

    # commit the changes 
    hg commit -A -m "Commit changes `date`" 

    # push the changes to the remote repository 
    if hg push 
    then 
     logger hg push success 
    else 
     logger hg push failure 
    fi 
done 

l'invite de connexion est affichée après la commande push hg est émis.

+0

Je l'ai essayé, mais ne fonctionne pas - exécuter le script: sh foo.sh. <.login # où .login est un fichier qui stocke le nom d'utilisateur et le mot de passe ... et dans mon fichier script shell mon instruction push hg devient hg push; lire l'utilisateur; echo $ utilisateur; lire passer; echo $ pass; – Jeffrey04

Répondre

3

Mercurial vous permet de mettre le nom d'utilisateur et mot de passe dans l'URL du référentiel:

hg push http://username:[email protected]/repo 

Si vous ne voulez pas mettre l'URL sur la ligne de commande, vous pouvez modifier le fichier hgrc pour le dépôt local et mettre le nom d'utilisateur et mot de passe dans l'URL default-push:

default-push = http://username:[email protected]/repo 

Cela signifie que tout hg push utilisera le nom d'utilisateur spécifié dans le fichier hgrc.

+0

Quels sont les risques de sécurité potentiels en faisant cela ?! désolé d'être paranoïaque ... – Jeffrey04

+0

Toute personne qui peut lire le fichier dans lequel vous avez inséré le mot de passe - soit le script ou le hgrc - aurait un accès push au dépôt distant. Ils ne peuvent pas causer de dommages permanents à votre dépôt, car vous pouvez toujours annuler les modifications qu'ils ont envoyées, mais ils pourraient perdre beaucoup de votre temps et polluer l'histoire de votre source. –

7

Je suis d'accord que vous devez configurer votre script de sauvegarde pour les connexions non-interactives. Une façon est de use SSH keys et une solution plus simple consiste à inclure le mot de passe directement dans l'URL.

Mercurial 1.3 rend beaucoup plus facile d'inclure des mots de passe HTTP dans vos fichiers de configuration. J'ai maintenant une

[auth] 
bb.prefix = https://bitbucket.org/mg/ 
bb.username = mg 
bb.password = pw 

section dans mon fichier de configuration. Cela signifie que vous pouvez éviter de stocker vos mots de passe dans plusieurs fichiers et vous concentrer uniquement sur la sécurisation d'un fichier.

En fait, j'utilise une autre nouvelle fonctionnalité afin d'éviter de mettre le mot de passe dans ~/.hgrc, puisque je pourrais vouloir montrer ce fichier à d'autres. Au lieu de cela je

%include .hgauth 

dans ~/.hgrc et ~/.hgauth a la section [auth] ci-dessus et est lisible par moi seul.

Questions connexes