Configurar la autenticación con clave pública en GitLab

Anteriormente demostré cómo configurar la autenticación SSH con clave pública en GitHub. Veamos como hacerlo ahora en una instancia local de GitLab.







Antes de comenzar es necesario configurar correctamente la variable de entorno PATH al comienzo del archivo ~./bashrc . Esto se debe a que git utiliza una sesión no interactiva, y se ignora por completo la configuración establecida en el archivo /etc/profile :

root@gitlab:~# nano /home/git/.bashrc

Debe quedar así (definir las variables de entorno antes de que el script verifique si la sesión es interactiva):

# ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples RUBYDIR="/usr/local/ruby/bin" YARNDIR="/usr/local/yarn/bin" PATH="${PATH}:${RUBYDIR}:${YARNDIR}" export PATH # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac

Ajustar las rutas según corresponda.

Luego volcar la clave pública del usuario del sistema local:

emi@hal9000:~$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnPLxMOXk3jbejRx+s0lResuvgqve2jmvJCMd1GgFvDtzf6N0pTCV9lf+/avUqqRUNBwoZi9SPosxT/J/4Sbs5N3CzM/r0dGzvYxl0aKNloOugEYxO94A/cuyREePYZH2znw6iADy0kPAZvNZKE8TWeDXHv2/Lit0Tbmf45nmFCmepDz6HWV4RfvWz+hnSb0Z1p3TCoZ3Q6vR0MdXoZ7hcg7IuqmGuORPoq5WjKCuwP9AfF/zrDc0YqG5OtjVTPqPiQukq+F5T4LBKflPs8aHLBqnkY2m4NZc4ZNuXI3OVl3/SrobY7gIivr3MYavdX430H+Fo3k1vzC8vxRfxweW5 emi@hal9000

Copiar y pegar la clave pública en la configuración de claves desde el menú "Settings > SSH Keys". Presionar "Add key" para finalizar.

Verificar el funcionamiento clonando un repositorio:

emi@hal9000:~$ cd /tmp/ emi@hal9000:/tmp$ git clone https://gitlab.linuxito.com/emiliano/my_awesome_project.git Cloning into 'my_awesome_project'... remote: Enumerating objects: 10, done. remote: Counting objects: 100% (10/10), done. remote: Compressing objects: 100% (7/7), done. remote: Total 10 (delta 3), reused 0 (delta 0) Unpacking objects: 100% (10/10), done. emi@hal9000:/tmp$ cd my_awesome_project/ emi@hal9000:/tmp/my_awesome_project$ ls -l total 4 -rw-r--r-- 1 emi emi 63 May 14 09:43 README.md

Introducir un cambio y hacer un nuevo commit:

emi@hal9000:/tmp/my_awesome_project$ echo "test clave ssh" > olakease.txt emi@hal9000:/tmp/my_awesome_project$ git add olakease.txt emi@hal9000:/tmp/my_awesome_project$ git commit -m "test ssh" [master 79f0765] test ssh 1 file changed, 1 insertion(+) create mode 100644 olakease.txt

Ahora es necesario cambiar el remoto para que el transporte sea a través de SSH en lugar de HTTPS:

emi@hal9000:/tmp/my_awesome_project$ git remote -v origin https://gitlab.linuxito.com/emiliano/my_awesome_project.git (fetch) origin https://gitlab.linuxito.com/emiliano/my_awesome_project.git (push) emi@hal9000:/tmp/my_awesome_project$ git remote set-url origin ssh://git@gitlab.linuxito.com:2222/emiliano/my_awesome_project.git emi@hal9000:/tmp/my_awesome_project$ git remote -v origin ssh://git@gitlab.linuxito.com:2222/emiliano/my_awesome_project.git (fetch) origin ssh://git@gitlab.linuxito.com:2222/emiliano/my_awesome_project.git (push)

Ajustar el puerto de SSH según corresponda.

Comprobar el funcionamiento de la autenticación por clave pública:

emi@hal9000:/tmp/my_awesome_project$ ssh -p 2222 -T git@gitlab.linuxito.com Welcome to GitLab, @emiliano!

Finalmente, ejecutar el push al remoto:

emi@hal9000:/tmp/my_awesome_project$ git push origin master Counting objects: 3, done. Delta compression using up to 6 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 287 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://gitlab.linuxito.com:2222/emiliano/my_awesome_project.git e429310..79f0765 master -> master

¡Éxito!



Tal vez pueda interesarte

