sudo: Jack of all trades, master of some

Servidor Git sencillo a través de SSH

5 comentarios

Git funciona a través de varios protocolos, entre ellos HTTP/S, Git y SSH, sin embargo, si se quiere tener un servidor Git privado, seguro, que no necesite accesos anónimos ni interface gráfica para la gestión, hacerlo a través de SSH es la vía más cómoda.

Hay que tener en cuenta que un servidor Git que funcione con SSH, es un poco más complicado de mantener en cuanto los permisos y accesos, sin embargo es posible hacerlo simplemente utilizando las herramientas del sistema.

En este escenario se utiliza un usuario común para todos los que tendrán acceso a los repositorios. Los accesos se hacen a través de llaves, por tanto cada uno de los desarrolladores deberá enviar su llave pública al admistrador del sistema.

Generación de llaves públicas

El usuario que tendrá acceso a los repositorios debe gener su llave pública con alguna herramienta que lo permita, en Linux es bien sencillo:

ssh-keygen -t rsa -b 4096 -C "$(whoami)@$(hostname)-$(date -I)"

Esta operación genera el archivo ~/.ssh/id_rsa.pub y el contenido de este es el que debe ser enviado al administrador del servidor Git.

Es muy importante asignar un passphrase a la llave privada previendo que sea robada y pueda ser utilizada con malas intenciones. Cada vez que el usuario se autentique en el servidor deberá enviar el passphrase como medida de seguridad, sin embargo, para evitar la molestia de ingresarlo cada vez que se acceda al servidor, existen mecanismos que permiten manejar el passphrase de diferentes formas, tales como cache o agentes.

Configuración del servidor

Instalación de Git

Instalar el paquete git, en dependencia de la distrubición.

Creación del usuario Git

Después de la instalación de git se crea un usuario (git) y posteriormente el directorio de configuración de SSH con los permisos más restrictivos posibles (todos los permisos para el dueño y ninguno para los demás usuarios), por último se crea el archivo que almacenará las llaves autorizadas.

sudo useradd -m git
su git
cd
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

Es importante añadir que es posible restringir el shell del usuario git de modo que solamente pueda realizar operaciones relacionadas con los repositorios.

Para esto es necesario identificar el camino del shell del sistema en cuestión y posteriormente se debe incorporar en el archivo /etc/shells.

which git-shell
/usr/bin/git-shell

Por último cambiar el shell del usuario git:

sudo chsh git /usr/bin/git-shell

Permitir el acceso vía SSH y llaves públicas

Digamos que el grupo de desarrolladores consta de tres personas y cada uno envia su llave pública al administrador y este la almacena como sigue:

/tmp/id_rsa.foo.pub
/tmp/id_rsa.bar.pub
/tmp/id_rsa.baz.pub

Por último, el administrador concatena el contenido de cada llave pública en el archivo de autorización.

cat /tmp/*.pub >> /home/git/.ssh/authorized_keys

Generación de repositorios vacíos

Inicialmente es necesario generar la estructura de un repositorio vacío que posterirmente será utilizado por los desarrolladores.

cd /home/git
mkdir proyecto-foo.git
cd proyecto-foo.git
git init --bare

Una vez realizadas todas las operaciones descritas anteriormente cada uno de los usuarios tendrá a su disposición un servidor Git con todas sus características.

Comentarios desactivados
  1. Yosbel Marín 4 años atrás

    no es encillo

    1. @Yosbel Marín

      Sí, lo es, en comparación con los demás protocolos la diferencia es bien notable.

  2. Anónimo 4 años atrás

    Buenos dias al administrador de este blog, necesito me escriba a mi correo jose.guilarte@grm.jovenclub.cu para hacerle una consulat

    1. @

      ¿Pudieras ser más específico? Quizá tu consulta pueda serle útil a los demás.

  3. Antes usaba estas artes oscuras, ahora uso un Gitlab, como un Github local para tu equipo.