Subversion en un hosting “compartido”
Publicado por Edgar González 30 Enero 2006 en linux, subversion.Existen varios proveedores de hosting que ofrecen la posibilidad de usar subversion en sus planes de hospedaje compartido (shared hosting).
En mi caso el proveedor no permite que se puede acceder al repositorio de subversion vía http://, ya que no instalan WebDAV (que al parecer en algunos casos interfiere con las extensiones de Front Page) y que por lo general no es una “buena práctica” ejecutar demonios en un hosting compartido.
En este sentido el acceso al repositorio de subversion debe hacerse vía svn+ssh://, con lo cual además de evitar la ejecución de demonios, ya que se hace un spawn de un proceso svnserve a través de un ssh-tunnel, el cual termina cuando se cierra la conexión, y adicionalmente me permite configurar para que existan distintos usuarios a nivel de subversion a pesar de usar una sola cuenta *nix (la del hosting).
Una vez que ya se tiene creado el repositorio en el hosting, y teniendo en cuenta que mi máquina de desarrollo es windows :-( estos son los pasos que seguí para configurar el acceso a subversion vía svn+ssh:
1. Instalar un cliente para ssh, en mi caso ya estaba usando la suite PuTTY (PuTTY, Plink, Pageant, PuTTYgen, etc)
2. Por cada usuario que quiero que acceda el repositorio de subversion genero una par de claves RSA usando PuTTYgen, la clave pública la agrego como una entrada mas en el archivo ~/.ssh/authorized_keys en mi hosting. Adicionalmente a cada una de las entradas en el ~/.ssh/authorized_keys que corresponden a usuarios subversion les agrego lo siguiente al comienzo de cada línea:
command="svnserve -t -r /path/a-mi/repo --tunnel-user=[usuario-svn]“
quedando entonces cada línea del archivo de esta forma:
command="svnserve -t -r /path/a-mi/repo --tunnel-user=[usuario-svn]” ssh-rsa [clave publica]
De esta forma garantizo que usando dichas claves privadas solo se tendrá acceso a subversion, y que cada clave está mapeada a un usuario distinto en subversion.
Para probar que estos ajustes estém funcionando, basta con conectarse vía ssh al dominio en cuestión usando las claves recien creadas, en mi caso ejecuto Pageant y cargo la clave privada a probar, luego arranco PuTTy (el cual usará la clave privada cargada en Pageant), la respuesta a la conexión debe ser de este tipo:
login as: [mi-usuario]
Authenticating with public key “mi clave” from agent
( success ( 1 2 ( ANONYMOUS EXTERNAL ) ( edit-pipeline ) ) )
Esto verifica que efectivamente se está arrancando el svnserve cuando se hace login usando la clave privada en cuestión.
3. Edito el archivo de configuración de subversion para que los url svn+ssh:// sean resueltos con Plink:
ssh = $SVN_SSH C:\\Archivos de programa\\putty\\plink.exe
4. Utilizo Pageant como cache de mi clave privada, para evitar que subversion me pregunte a cada momento por la contraseña.
De esta forma puedo acceder a mi repositorio subversion haciendo:
svn list svn+ssh://usuariodominio@midominio.com/
O si me quiero facilitar la vida uso TortoiseSVN para acceder al repositorio de subversion sin necesidad de la línea de comandos.
(en este caso usuariodominio corresponde a la cuenta de usuario del hosting, no a los usuarios subversion)
Dependiendo del hosting que se tenga y del cliente ssh que se use es probable que se deba pedir al hosting que cambie el jailshell de la cuenta por un bash o modificar el banner de bienvenida.
Más información en el manual de subversion.
1 Respuesta a “Subversion en un hosting “compartido””