Llaves SSH en GitHub y GitLab🔗

Es posible tener distintas llaves SSH asociadas a un solo correo electrónico tanto para GitHub como para GitLab, basta con cambiar la ubicación en donde se guardarán las llaves al momento de generarlas.

Suponiendo que el correo electrónico sea nihilipster@nihilipster.dev, se generan las llaves SSH de la siguiente manera:

Para GitHub, mediante el algoritmo RSA:

[nihilipster@localhost:~]$ /usr/bin/ssh-keygen -t rsa -b 4096 \
  -C nihilipster@nihilipster.dev \
  -f $HOME/.ssh/nihilipster@nihilipster.dev_github.com_id_rsa

Para GitLab, mediante el algoritmo RSA:

[nihilipster@localhost:~]$ /usr/bin/ssh-keygen -t rsa -b 4096 \
  -C nihilipster@nihilipster.dev \
  -f $HOME/.ssh/nihilipster@nihilipster.dev_gitlab.com_id_rsa

Ubicación de llaves SSH

Mediante el parámetro -f de ssh-keygen es posible cambiar la ubicación de las llaves SSH a generar.

Al terminar se obtendrá lo siguiente en $HOME/.ssh:

[nihilipster@localhost:~]$ tree $HOME/.ssh
/home/nihilipster/.ssh
├── nihilipster@nihilipster.dev_github.com_id_rsa
├── nihilipster@nihilipster.dev_github.com_id_rsa.pub
├── nihilipster@nihilipster.dev_gitlab.com_id_rsa
└── nihilipster@nihilipster.dev_gitlab.com_id_rsa.pub

0 directories, 4 files

Uso del algoritmo ED25519

Mientras que la documentación de GitHub hace mención de RSA, la documentación de GitLab recomienda el uso de ED25519 por sobre RSA.

En caso de querer hacer uso del algoritmo ED25519 se procede de la siguiente manera:

Para GitHub, mediante el algoritmo ED25519:

[nihilipster@localhost:~]$ /usr/bin/ssh-keygen -t ed25519 \
  -C nihilipster@nihilipster.dev \
  -f $HOME/.ssh/nihilipster@nihilipster.dev_github.com_id_ed25519

Para GitLab, mediante el algoritmo ED25519:

[nihilipster@localhost:~]$ /usr/bin/ssh-keygen -t ed25519 \
  -C nihilipster@nihilipster.dev \
  -f $HOME/.ssh/nihilipster@nihilipster.dev_gitlab.com_id_ed25519

Al terminar se obtendrá lo siguiente en $HOME/.ssh:

[nihilipster@localhost:~]$ tree $HOME/.ssh
/home/nihilipster/.ssh
├── nihilipster@nihilipster.dev_github.com_id_ed25519
├── nihilipster@nihilipster.dev_github.com_id_ed25519.pub
├── nihilipster@nihilipster.dev_github.com_id_rsa
├── nihilipster@nihilipster.dev_github.com_id_rsa.pub
├── nihilipster@nihilipster.dev_gitlab.com_id_ed25519
├── nihilipster@nihilipster.dev_gitlab.com_id_ed25519.pub
├── nihilipster@nihilipster.dev_gitlab.com_id_rsa
└── nihilipster@nihilipster.dev_gitlab.com_id_rsa.pub

0 directories, 8 files

Será necesario registrar las llaves públicas ante GitHub y GitLab, respectivamente, para lo cual se puede copiar su contenido mediante xclip:

Para GitHub:

[nihilipster@localhost:~]$ xclip -sel clip < $HOME/.ssh/nihilipster@nihilipster.dev_github.com_id_rsa.pub

Para GitLab:

[nihilipster@localhost:~]$ xclip -sel clip < $HOME/.ssh/nihilipster@nihilipster.dev_gitlab.com_id_rsa.pub

En caso de hacer uso ssh-agent y ssh-add, se indica la ubicación de las llaves privadas, por ejemplo para RSA:

[nihilipster@localhost:~]$ /usr/bin/ssh-add $HOME/.ssh/nihilipster@nihilipster.dev_github.com_id_rsa
[nihilipster@localhost:~]$ /usr/bin/ssh-add $HOME/.ssh/nihilipster@nihilipster.dev_gitlab.com_id_rsa

En caso de ssh, se configura el método de autenticación y la llaves privadas a usar:

# GitHub
Host github.com
  Preferredauthentications publickey
  IdentityFile ~/.ssh/nihilipster@nihilipster.dev_github.com_id_rsa
# GitLab
Host gitlab.company.com
  Preferredauthentications publickey
  IdentityFile ~/.ssh/nihilipster@nihilipster.dev_gitlab.com_id_rsa

Fuentes🔗