Se aínda non o sabes, dígocho eu: Github1 vai deixar de admitir contrasinais como método de autenticación para os teus repositorios (mira a súa entrada). Este cambio pretende fortificar a seguridade xeral da famosa plataforma de git2. Nesta entrada vou ensinarche como adaptarte ao cambio.

Un contrasinal para controlalos a todos

De acordo, vexo que Github vai impoñer o cambio pero… cal é o problema de ter un contrasinal en Github para todo tal e como estaba facendo ata agora?

Repositorio Github

Imaxe: Un repositorio en Github.

Facendo pull dun repo e entrando en Github

Ata agora, posiblemente estiveses entrando en Github co mesmo contrasinal que o que usabas para autenticarte na CLI para facer algún git pull ou git push. Ben, isto é un risco de seguridade, porque estás enviando o teu contrasinal cada vez que fas unha petición. Ademais, a maioría de nós configura o cliente de Git para gardar o teu contrasinal para que non teñas que reescribilo cada vez.

Porén, ter o mesmo contrasinal para todo e, posiblemente, almacenado en máis dun dispositivo non parece a mellor opción. Ademais, hai outro problema.

Activando un segundo factor de autenticación

Ter un segundo factor de autenticación en Github non era moi común ata agora. Porén, Github é o lugar onde gardas o teu código privado e público, e queres asegurarte de ter a máxima seguridade en canto ao acceso á túa conta. en realidade, isto é de gran importancia para a xente traballando nalgún código privado dunha empresa.

Porén, se usas o teu contrasinal para acceder os teus repositorios dende o CLI de git, como fas para usar o teu segundo factor? O tema é que non vas poder facelo. Unha vez adoptes o cambio que che vou explicar a continuación, vas poder activar un segundo factor de autenticación para a túa conta.

Chave de seguridade en github

Imaxe: Chave de seguridade como un método de autenticación de segundo factor en Github.

SSH ao rescate

SSH (Secure Shell) é a utilidade de administración máis usada. Reemplazou a antiga utilidade telnet xa que SSH proporciona unha comunicación segura e encriptada entre o cliente e o servidor. SSH úsase para conectarse a servidores remotos para a súa administración, e para outros servizos como sFTP (secure File Transfer Protocol).

Usando SSH con Git e Github

Entón… podo usar SSH con git? Por suposto! En vez de usar HTTPS como posiblemente estás facendo, escribirás algo como:

git clone git@github.com:myusername/my-private-repo.git

Montalo é sinxelo. Só son tres pasos:

  1. Xerar un par de claves SSH
  2. Indicarlle a túa clave pública a Github
  3. Clonar ou cambiar a túa URL remota en git

1. Xerar un par de claves SSH

O primeiro paso é un simple comando. Vas crear un par de claves e gardalo na túa máquina. A túa clave privada vaise usar para autenticarte en github, mentres que a clave pública vaise copiar a github (paso 2). Recomendo usar ed25519. Aí vai un exemplo:

ssh-keygen -t ed25519 -C "githubtest"
Xerar un par de claves

Imaxe: Primeiro paso: xerar o teu par asimétrico de claves SSH.

2. Indicarlle a túa clave pública a Github

cat ~/.ssh/githubtest.pub 

Despois disto, vai a Github (https://github.com) > Axustes > Claves SSH e GPG > Nova clave SSH. Agora, pega os contidos que copiaches do cat previo e xa o tes!

Engadir unha clave SSH a Github

Imaxe: Segundo paso: copia a túa clave pública a Github.

3. Clonar ou cambiar a túa URL remota en git

Agora, é o momento de probar que todo funciona. Podes clonar directamente calquera dos teus repositorios ou cambiar algún repositorio xa clonado para que funcione con SSH. O seguinte snippet permíteche comprobar que a nova autenticación está funcionando e facendo que un repositorio pase a usar SSH:

ssh -T git@github.com
cd your/existing/repo/directory
git remote set-url origin git@github.com:username/repo.git
git fetch origin master

Unha alternativa: usar tokens

Se non queres investir tempo en xerar claves SSH, tamén podes xerar tokens de acceso. Vai a Github (https://github.com) > Axustes > Axustes de Desenvolvedor > Tokens de acceso persoais. Agora, podes usala como o farías cun contrasinal normal.

  • Beneficios: Restrinxir acceso a algúns repositorios e usar autenticación Basic con HTTPS diferente ao teu contrasinal da conta.
  • Contras: Non é asimétrico.
Token de acceso Github

Imaxe: Xera un token de acceso Github para os teus repositorios.

Extra: algúns consellos útiles para SSH

Agora que usas git con SSH, vouche ensinar un par de cousas guais sobre SSH.

1. Non volvas escribir o contrasinal de cada vez

As claves privadas SSH están (deberían estalo) cifradas cun contrasinal. Por iso, cada vez que queres usalas, pregúntache por un contrasinal. Como podes evitar rescribir o teu contrasinal unha e outra vez? Con ssh-agent.

Un Axente SSH mantén as túas claves SSH privadas descifradas en memoria para que poidas usalas sen preguntarche polo contrasinal de cada vez. Úsao así:

ssh-add ~/.ssh/githubtest
ssh-add -l

2. Usa a túa clave SSH local nun servidor remoto

SSH fai algo de maxia a veces. Se tes un servidor remoto onde queres usar git, podes usar o teu Axente SSH local do teu ordenador para usar Git no teu servidor remoto. Así é como podes facelo:

  1. Engades a túa clave privada ao Axente SSH
  2. Conecta ao teu servidor remoto usando SSH. Coidado: ssh -A usuario@ipremota
  3. Usa o CLI de git con SSH

Conclusión

Como ves, a veces cando nos forzan a actualizar a unha mellor alternativa é un lío, pero resulta nun xeito máis seguro de traballar. Neste caso, polo menos para min, tamén resultou nunha mellor experiencia xa que aprendín como evitar reescribir o contrasinal de cada vez!

Obri! Grazas por lelo, este xa é o 5º artigo do #52challenge!


  1. Github é unha plataforma que os programadores usan para gardar o seu código. A maioría deles, gárdao publicamente para que poida ser lido (e usado) por outros programadores. Isto chámase Software de Código Aberto (e libre). ↩︎

  2. Git é unha ferramenta usada polos programadores para controlar versións do seu código fonte. Cando fan cambios, usan git para trazalos para o futuro. Github é unha plataforma que usa git para gardar o código e permite a outros contribuír ao teu código. ↩︎