12 Configure claves para SSH

Si planea hacer push/pull utilizando claves SSH, debe configurarlas. Debería hacer esto (o almacenar en caché su nombre de usuario y contraseña, capítulo 11), para que no tenga que autenticarse interactivamente con GitHub una y otra vez. Tendrá que configurarlo en cada ordenador al que quiera conectarse con GitHub.

12.1 Claves SSH

Las claves SSH proporcionan una forma más segura de iniciar sesión en un servidor que usa una simple contraseña. Mientras que una contraseña puede ser agrietada con un ataque de fuerza bruta, las claves SSH son casi imposibles de descifrar por fuerza bruta. Generar un par de claves le proporciona dos largas cadenas de caracteres: una clave pública y una privada. Puede colocar la clave pública en cualquier servidor y, a continuación, desbloquearla conectándose a ella con un cliente que ya tiene la clave privada. Cuando los dos coinciden, el sistema se desbloquea sin necesidad de una contraseña. Puede aumentar la seguridad aún más, protegiendo la clave privada con una contraseña.

Adaptado de las instrucciones proporcionadas por GitHub y Digital Ocean.

12.1.1 Esquema y consejos de SSH

Esta es la visión general de alto nivel de lo que debe suceder:

  • Cree un par de claves SSH públicas y privadas. Literalmente, 2 archivos especiales, en un lugar especial. Opcionalmente, encripte la clave privada con una frase de contraseña (práctica recomendada).
  • Agregue la clave privada a su ssh-agent. Si lo protegió con una frase de contraseña, es posible que tenga una configuración adicional.
  • Agregue su clave pública a su perfil de GitHub.

Consejo:

  • Si es nuevo en la programación y en el shell, probablemente encuentre HTTPS más fácil al principio (capítulo 11). Siempre puede cambiar a SSH más tarde. Puede usar un método en la computadora A y otro en la computadora B.
  • Debe intercambiar sus claves SSH periódicamente. Algo así como una vez al año.
  • Es una buena práctica proteger su clave privada con una frase de contraseña. Esto puede dificultar la configuración y el uso, por lo que si no está preparado (todavía), no use una frase de contraseña o considere seriamente usar HTTPS.
  • No haga gimnasia extraña para tener solo un par de llaves reutilizadas en varias computadoras. Probablemente debería tener una clave por computadora (yo hago esto). Algunas personas incluso tienen una clave por computadora, por servicio (no hago esto).
  • Es normal asociar múltiples claves públicas con su cuenta de GitHub. Por ejemplo, una clave pública para cada computadora con la que se conecta.

12.1.2 ¿Ya tiene claves?

Puede verificar esto desde RStudio o desde el shell.

Consejo global: si tiene claves existentes, pero no tiene idea de dónde vinieron o por qué las creó, debería considerar seriamente crear un nuevo par de claves SSH. Depende de usted averiguar si/cómo eliminar las antiguas. Pero no deje que eso le impida crear nuevas claves y seguir adelante.

12.2 Configuración desde RStudio

Vaya a Tools > Global Options… > Git/SVN. Si ve algo como ~/.ssh/id_rsa en el cuadro de diálogo SSH RSA, definitivamente tiene claves existentes. Advertencia: RStudio únicamente busca una clave denominada id_rsa y id_rsa.pub. Esto tiene sentido, porque está por defecto y es muy común. Pero las claves SSH pueden tener otros nombres. Si quiere estar completamente seguro, debería revisarlos en el shell.

12.3 Configuración desde el shell

Vaya al shell (Apéndice A).

Liste las claves existentes:

Si le dicen que ~/.ssh/ no existe, no tiene claves SSH.

Si ve un par de archivos como id_rsa.pub y id_rsa, ya tiene un par de claves. El patrón típico es id_FOO.pub (la clave pública) y id_FOO (la clave privada). Si está a gusto con sus claves existentes, pase a las secciones sobre cómo agregar una clave al ssh-agent y en GitHub.

12.4 Cree un par de claves SSH

12.4.1 Opción 1: Configuración desde RStudio

Vaya a Tools > Global Options… > Git/SVN > Create RSA Key…

RStudio le solicitará una frase de contraseña. Es opcional, pero también es una buena práctica. La configuración de su sistema para un funcionamiento sin problemas con una clave protegida por frase de acceso introduce más partes móviles. Si es completamente nuevo en todo esto, omita la frase de contraseña (¡o use HTTPS!) E impleméntela la próxima vez, cuando esté más cómodo con la configuración del sistema. No usé una frase de contraseña al principio, pero ahora sí y la grabo en un administrador de contraseñas.

Haga clic en “Create” y RStudio generará un par de claves SSH, almacenadas en los archivos ~/.ssh/id_rsa y `~/.ssh/id_rsa.pub.

12.4.2 Opción 2: Configuración desde el shell

Cree el par de claves, pero sustituya un comentario que signifique algo para usted, especialmente si tendrá varias claves SSH en su vida. Considere el correo electrónico asociado con su cuenta de GitHub o el nombre de su computadora, e.g. you@example.com o 2018-mbp.

Acepte el ofrecimiento de guardar la clave in la localización por defecto. Únicamente presione Enter aquí:

Usted tiene la opción de proteger la clave con una frase de contraseña. Es opcional, pero también es una mejor práctica. La configuración de su sistema para un funcionamiento sin problemas con una clave protegida por frase de acceso introduce más partes móviles. Si es completamente nuevo en todo esto, omita la frase de contraseña e impleméntela la próxima vez, cuando esté más cómodo con la configuración del sistema. No usé una frase de contraseña al principio, pero ahora sí y la grabo en un administrador de contraseñas.

El proceso debería completarse ahora y debería tener el siguiente aspecto:

12.4.3 Agrege una clave al agente ssh

Dígale a su agente ssh sobre la clave y, especialmente, configúrela para administrar la contraseña, si decide establecer una.

Las cosas se ponen un poco específicas del sistema operativo por aquí. En caso de duda, consulte las instrucciones de GitHub para SSH, que se mantienen actualizadas para Mac, Windows y Linux.

12.4.3.1 Mac OS

Aegúrese de que el ssh-agent esté activado:

Agrege su clave. Si establece una frase de contraseña, será requerido aquí. Proporciónela. La opción -K almacena su frase de contraseña en el llavero.

Si está utilizando una frase de contraseña y está en macOS Sierra 10.12.2 o superior, debe hacer una cosa más. Cree un archivo ~/.ssh/config con estos contenidos:

Esto debería almacenar su contraseña constantemente en el llavero. De lo contrario, deberá ingresarla cada vez que inicie sesión. Hilo útil de StackOverflow: ¿Cómo puedo agregar permanentemente mi clave privada SSH a Keychain para que esté disponible automáticamente para ssh?.

12.4.3.2 Windows

En un shell de Git Bash, asegúrese de que ssh-agent se esté ejecutando:

Agregue su clave.

12.4.3.3 Linux

En un shell, asegúrese de que ssh-agent se esté ejecutando:

Agregue su clave.

12.5 Proporcionar una clave pública a GitHub

Ahora almacenamos una copia de su clave pública en GitHub.

12.5.1 De RStudio al portapapeles

Vaya a Tools > Global Options …> Git/SVN. Si su par de claves tienen el nombre habitual, id_rsa.pub y id_rsa, RStudio lo verá y le ofrecerá “View public key”. Hágalo y acepte el ofrecimiento de copiar en su portapapeles. Si su par de claves tienen nombres diferentes, use otro método.

12.5.2 Del Shell al portapapeles

Copie la clave pública en su portapapeles. Por ejemplo, abra ~/.ssh/id_rsa.pub en un editor y copie el contenido en su portapapeles o realice una de las siguientes acciones en la línea de comandos:

  • Mac OS: pbcopy < ~/.ssh/id_rsa.pub
  • Windows: clip < ~/.ssh/id_rsa.pub
  • Linux: xclip -sel clip < ~/.ssh/id_rsa.pub

En Linux: si es necesario, instálelo via apt-get o yum. Por ejemplo, sudo apt-get install xclip.

12.5.3 En GitHub

Asegúrese de haber iniciado sesión en GitHub. Haga clic en su foto de perfil en la esquina superior derecha e ir a Configuration, luego SSH and GPG keys. Haga clic en “New SSH key”. Pegue su clave pública en el cuadro “Key”. Dele un título informativo, presumiblemente relacionado con el comentario que usó antes, durante la creación de la clave. Por ejemplo, puede usar 2018-mbp para registrar el año y la computadora. Haga clic en “Add SSH key”.

En teoría, ¡hemos terminado! Puede usar ssh -T git@github.com para probar su conexión con GitHub. Si no está seguro de qué hacer con la salida, consulte el enlace para obtener detalles. Por supuesto, la mejor prueba es trabajar a través de ejemplos de uso realistas en otras partes de esta guía.

12.6 Solución de problemas

12.6.1 HTTPS vs SSH

Si crees que tienes SSH configurado correctamente y aún así eres requerido por las credenciales, considere esto: para el repositorio en cuestión, ¿ha configurado posiblemente GitHub, probablemente llamado origin, como un control remoto HTTPS, en lugar de SSH?

Cómo ver las URL remotas asociadas con el repositorio actual en el shell:

Un SSH remoto luce así:

git@github.com:USERNAME/REPOSITORY.git

mientras un HTTPS remote así:

https://github.com/USERNAME/REPOSITORY.git

Puede alternar entre estos con git remote set-url:

12.6.2 git2r – o alguna otra herramienta – no puede encontrar las claves SSH en Windows

¿Ha visto este mensaje de error?

Error in .local(object, ...) : 
  Error in 'git2r_push': error authenticating: failed connecting agent

Lo hemos visto al trabajar con Git/GitHub desde R a través del paquete git2r, que se usa tras bambalinas de muchos paquetes de R, como devtools, ghit y usethis.

git2r usa la librería libgit2, no el Git que instaló. Esto significa que puede tener las claves SSH configuradas correctamente para que Git trabaje en un shell de Git Bash y desde RStudio y aún tenga problemas con git2r.

La causa raíz es la confusión sobre la ubicación del .ssh/ en Windows. La idea de R de su directorio de inicio en Windows a menudo difiere de la ubicación predeterminada de los archivos de configuración para Git y ssh, como .ssh/. En los sistemas *nix, estos generalmente coinciden y no hay problema.

Dos directorios importantes en Windows son HOME y USERPROFILE. R generalmente asocia ~ con HOME, pero Git y ssh a menudo consultan USERPROFILE para sus archivos de configuración. En mi máquina virtual con Windows 10, veo:

Dos soluciones:

  • Indíquele a git2r explícitamente dónde encontrar su clave pública y privada. Ejemplo usando usethis::use_github():
  • Cree un enlace simbólico para que el .ssh/ en el directorio de inicio de R apunte a su directorio .ssh/ real. Ejemplo aportado por Ian Lyttle en Windows 7 utilizando el símbolo del sistema:

Finalmente, si git2r parece incapaz de obtener su frase de contraseña SSH de ssh-agent, instale el paquete getPass:

y git2r debería abrir una ventana emergente donde puede ingresar su frase de contraseña. Gracias a Ian Lyttle por este consejo.

Este enlace proporciona una gran explicación de la incertidumbre acerca de dónde .ssh/ y .gitconfig del usuario se encuentran en Windows: git en Windows - ubicación de los archivos de configuración. En pocas palabras: busque dónde espera su herramienta principal y cree enlaces simbólicos para ayudar a otras herramientas a encontrar esta información.

12.6.3 Otros

Otras cosas para verificar:

  • ¿Agregó el SSH a su ssh-agent?
  • ¿Ha configurado Mac OS Sierra o High Sierra para almacenar de forma persistente su frase de contraseña en el llavero?
  • ¿Agregó la clave pública a GitHub?