Servidor Git sencillo a través de SSH
5 comentariosGit 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.
no es encillo
Sí, lo es, en comparación con los demás protocolos la diferencia es bien notable.
Buenos dias al administrador de este blog, necesito me escriba a mi correo jose.guilarte@grm.jovenclub.cu para hacerle una consulat
¿Pudieras ser más específico? Quizá tu consulta pueda serle útil a los demás.
Antes usaba estas artes oscuras, ahora uso un Gitlab, como un Github local para tu equipo.