Práctica: Repositorio svn y ssh

Hagamos algo similar a lo anterior para obtener un repositorio subversion compartido entre varios usuarios sin tener que pedir los favores del administrador.

  1. Genere una pareja de claves en el servidor de subversion:
    -bash-3.2$ ssh-keygen -t dsa -P '' -C 'svnkey for pp2' -f 'svnkey_pp2'
    
  2. Añada la clave pública a authorized_keys
  3. Ponga como comando forzado en authorized_keys la llamada al servidor de subversion con la opción -t:
    command="/usr/bin/svnserve -t" ssh-dss AAA...== svnkey for pp2
    
    La opción -t hace que svnserve se ejecute en modo tunel, trabajando 'a la inetd' con la salvedad que la conexión se considera pre-autenticada con el usuario actual.

  4. Dele la clave privada a su compañero de equipo. Este deberá ponerla en su directorio .ssh
  5. Su compañero de equipo debe configurar la conexión con el servidor de subversión. Para ello introduce unas líneas como estas en el fichero ~/.ssh/config:

    lgforte@europa:~$ cat .ssh/config
    Host banot 
    HostName banot.etsii.ull.es XXX.XXX.XXX.XXX
    user casiano
    IdentityFile /home/lgforte/.ssh/svnkey_pp2
    ForwardX11 yes
    

    En este ejemplo el compañero de equipo es lgforte y se va a conectar al repositorio que esta en la cuenta de casiano

  6. Ahora su compañero de equipo está en condiciones de trabajar en su repositorio:

    lgforte@europa:~$ svn ls svn+ssh://banot/home/casiano/repository/acme-svn/trunk
    Build.PL
    Changes
    MANIFEST
    Makefile.PL
    README
    lib/
    t/
    

Se puede añadir la opción -r repositorio al comando forzado de la clave:

command="/usr/bin/svnserve -t -r /home/casiano/repository" ssh-dss AAA...== svnkey for pp2

Esto facilita la conexión: no es necesario especificar el camino completo hasta el repositorio:

lgforte@europa:~$ svn ls svn+ssh://banot
acme-svn/
lgforte@europa:~$ svn ls svn+ssh://banot
acme-svn/
lgforte@europa:~$ svn ls svn+ssh://banot/acme-svn
branches/
trunk/
lgforte@europa:~$ svn ls svn+ssh://banot/acme-svn/trunk
Build.PL
Changes
MANIFEST
Makefile.PL
README
lib/
t/

Usando la opción --tunnel-user=user podemos hacer que subversion tome nota del usuario asociado con la clave:

command="/usr/bin/svnserve -t -r /home/casiano/repository --tunnel-user=lgforte",no-port-forwarding  ssh-dss ....

Ahora subversión tomará nota del usuario asociado con la clave y guardará la información en los logs:

lgforte@europa:/tmp$ svn checkout svn+ssh://banot/acme-svn/trunk/ acme-svn
A    acme-svn/t
A    acme-svn/t/00.load.t
A    acme-svn/t/perlcritic.t
A    acme-svn/t/pod.t
A    acme-svn/t/pod-coverage.t
A    acme-svn/MANIFEST
A    acme-svn/lib
A    acme-svn/lib/Acme
A    acme-svn/lib/Acme/SVN.pm
A    acme-svn/Makefile.PL
A    acme-svn/Changes
A    acme-svn/Build.PL
A    acme-svn/README
Revisión obtenida: 5
lgforte@europa:/tmp$ cd acme-svn/
lgforte@europa:/tmp/acme-svn$ vi Makefile.PL
lgforte@europa:/tmp/acme-svn$ svn commit -m 'lgforte modification'
Enviando       Makefile.PL
Transmitiendo contenido de archivos .
Commit de la revisión 6.
lgforte@europa:/tmp/acme-svn$ svn log Makefile.PL
------------------------------------------------------------------------
r6 | lgforte | 2009-04-23 11:54:54 +0100 (jue, 23 abr 2009) | 1 line

lgforte modification
------------------------------------------------------------------------
r4 | casiano | 2009-03-05 15:56:20 +0000 (jue, 05 mar 2009) | 1 line

sally in trunk: list of final comments
------------------------------------------------------------------------
r3 | casiano | 2009-03-05 15:56:02 +0000 (jue, 05 mar 2009) | 1 line

sally in trunk: list of comments
------------------------------------------------------------------------
r1 | casiano | 2009-03-05 15:53:05 +0000 (jue, 05 mar 2009) | 1 line

branches
------------------------------------------------------------------------

Véase también:



Subsecciones
Casiano Rodríguez León
2012-02-29