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


Compartí este artículo