Un espace si dense
SVN, gestionnaire de version

SVN+SSH

lundi 11 décembre 2006 par guillaume

Quand le serveur central admet svn mais n’a pas svnserve au bon endroit, ce n’est pas facile de se faire un petit repos svn pour un projet personel (un article dans mon cas), voilà le truc pour passer outre.

Contexte

Subversion (SVN) est un système de gestion de versions, c’est à dire qu’il permet à une ou plusieurs personnes de travailler sur un projet sans avoir à faire 150 fichiers de type "mon_article_v1_11_12_2006_16h_35min_42s_42.tex"

Comment ça fonctionne ?

La tache principale de svn est de faire une base de données et de gérer les modifications des fichiers sur cette base. On peut mettre cette base sur son ordinateur personnel (très pratique lorsque l’on travaille sur un petit programme ou un petit document), sur une clef USB (quand on veut travailler avec plusieurs ordinateurs non connectés au net) ou sur un serveur. C’est ce dernier point qui nous intéresse.

Pour travailler sur un serveur distant, 3 techniques sont utilisables :

  • Le serveur svn
  • Le serveur svn par http
  • La technique svn+ssh

Les 2 premières techniques nécessitent d’avoir une autorisation préalable de notre administrateur système (qui doit faire quelques configurations). Ce sont ces techniques qu’il faut utiliser si l’on veut travailler à plusieurs (il y a aussi une astuce pour utiliser la 3ème, mais qui nécessite un espace commun comme une zone echange).

La problématique

Ici, je veux faire une petite base de données svn pour utiliser sur mes ordi perso (labo ou internet). Je peux me connecter sur le serveur du labo par ssh et je peux faire une authentification RSA.

Premier essai

Je me connecte par ssh et je fais :

#cd mon_sous_dossier

#/usr/local/subversion/bin/svnadmin create mon_dossier_svn

On notera que svnadmin n’est pas situé dans un endroit où on peux l’appeler directement. Cela n’est généralement pas vrai sur un serveur debian, mais ça l’est sur d’autres distributions.

Je retourne sur mon ordinateur où j’ai commencé par faire mon dossier de travail "dossier_pl" et j’ai :

#svn import dossier_pl/

#svn co svn+ssh ://moi@serveur_labo/mon_sous_dossier/mon _dossier_svn

bash :line 1 : svnserve : command not found.

svn : connexion fermée de manière innatendue

Et oui, svnserve n’est pas à la bonne place dans la distribution. On recherche un peu dans la littérature et on trouve la technique à ne pas faire :

Technique à ne pas faire

Très simple, la technique à ne pas faire pour passer par ssh :

  • On se connecte sur le serveur et on va dans .ssh
  • On édite authorized_keys
  • On trouve notre clef "ssh-dss ****** moi@mamachine"
  • Que l’on modifie en "command="/usr/local/subversion/bin/svnserve" ssh-dss ******** moi@mamachine"

C’est vrai, on délogge, et on fait tout ce que l’on veut avec subversion. Mais un petit ssh normal vers la machine montre qu’il est impossible de faire autre chose que svnserve.

  • Solution 1 Créer un autre utilisateur qui fera seulement le travail ssh sur la machine. C’est bien, mais si on ne peut pas créer d’utilisateur sur la machine du labo, c’est foutu
  • Solution 2 Appeler l’administrateur système et faire un système complet, mais on a dit que l’on ne voulait pas faire ça.
  • Solution 3 Générer un autre système clef value pour ssh dédié à subversion

La solution : une clef dédiée à SSH

On va commencer par générer un nouveau système clef publique, clef privée que l’on va mettre dans un nouveau dossier ".svnssh" (on est toujours sous un type d’unix (linux...)).

Attention : faire attention à ne pas overwriter vos anciennes clefs On créé notre nouvelles clef :

#ssh-keygen -t dsa

Et le programme nous demande le fichier de sortie /home/chezouam/.svnssh/id_dsa puis la passphrase.

Maintenant, on a une nouvelle clef publique dans .svnssh/id_dsa.pub On met cette nouvelle clef sur le serveur dans .ssh/authorized_keys avec command="/..../svnserve" comme dans la partie à ne pas faire.

En fait, nous avons créé une système de clef publique privée exprès pour ssh. Si nous n’avions pas mis la commande ’command="/.../svnserve", nous aurions pu nous logger sur le serveur en tapant ssh -i /home/chezouam/.svnssh/id_dsa moi@serveurlabo.

Pour que le système marche, il faut dire à ssh que l’on doit utiliser cette commande pour se connecter :

Pour cela, on tape dans le shell

#export SVN_SSH="ssh -i /home/chezouam/.svnssh/id_dsa"

Et normalement, ça doit marcher...


Accueil du site | Contact | Plan du site | Espace privé | visites : 50503

RSS RSSfr

Site réalisé avec SPIP 1.8.3 + ALTERNATIVES