Cuando enviamos datos por internet, ya sea una imagen, un archivo o sólo un simple mensaje, corremos el riesgo de que nos roben nuestra información en el intento, antes de que llegue al receptor.
¿Qué es la criptografía asimétrica?
La criptografía asimétrica es la forma segura de enviar y recibir un mensaje, ya que incluso si llega a caer en las manos de otra persona, nunca podrá leer el mensaje.
¿Cómo funciona?
En este caso, Bernardo le quiere mandar un mensaje a Ana, ambos cuentan con una llave pública y una privada que están ligadas con un algoritmo matemático, Ana le da a Bernardo su llave pública y ella conserva la llave privada, Bernardo manda su mensaje cifrado con la llave pública que le proporcionó Ana, Ana recibe el mensaje de Bernardo y lo des encripta con su llave privada de esta manera Ana y sólo Ana podrá leer el mensaje que le envió Bernardo.
No estamos exentos a estos ataques a la hora de hacer un push o un pull a GitHub.
O de igual forma pueden crackear el usuario y contraseña y así tener acceso al código de nuestros proyectos, por este motivo debemos tener una conexión segura entre las dos partes.
Este tutorial muestra cómo hacerlo.
¡Ahora si!
¡Vamos a lo técnico!
Windows/Linux
En nuestra consola de git bash(Windows) o nuestra consola (Linux) nos movemos a home, por que las llaves pueden ser para todos los proyectos en los que trabajemos.
Luego generamos las llaves con ssh-keygen seguidos de los parámetros: -t aquí ponemos el algoritmo de encriptación que queremos en este caso ocuparemos la más común que es RSA, -b aquí vamos a especificar que tan compleja es la llave, seguido de -C aquí vamos a poner el email al que se va a configurar la llave.
Nos pide la ruta en la que se va a guardar las credenciales, en este caso damos enter, para que las guarde en home:
Después nos pide una contraseña con espacios (es recomendable ponerla)
Volvemos a ingresar la contraseña:
Nos genera la llave privada: id_rsa en una carpeta oculta .ssh dentro del directorio home y la llave pública id_rsa.pub
Una vez obtenido el resultado sabremos que hemos creado nuestras llaves (pública y privada) SSH satisfactoriamente:
Para comprobarlo escribimos el comando:
ls -al ~/.ssh
Debemos evaluar si está corriendo el servidor de ssh:
eval $(ssh-agent -s)
Agregar la llave privada a Git (Nos pide el password que le dimos con espacios).
ssh-add ~/.ssh/id_rsa
Nos aseguramos de copiar el contenido de nuestra llave SSH pública (id_rsa.pub)
lo podemos hacer con el uso de vi o nano:
vi ~/.ssh/id_rsa.pub
Copiamos el contenido. (Salimos con esc+shift+zz)
En estos momentos debemos de ir a nuestro GitHub → settings → SSH and GPG Keys → New SSH Key
En title ponemos algo que identifique la Lap o el computador que estemos usando, en key pegamos lo que copiamos de nuestra llave pública:
Damos click a Add SSH Key, podemos ver que nos agregó una nueva llave con el nombre que le dimos, pero aún no se ha usado.
Copiamos la llave pública de cualquiera de nuestros repositorio de GitHub (Clone with SSH)
Tenemos que posicionarnos en el proyecto que copiamos la llave SSH pública de GitHub y con el siguiente comando podemos ver a qué repositorio apunta nuestro proyecto:
En este caso no nos dice nada la consola, pero podemos verificarlo ingresando de nuevo el comando (podemos notar que cambió el origin):
git remote -v
Y listo, podemos comprobarlo haciendo un push al repositorio y no nos pedirá el usuario ni la contraseña (La primera vez nos pregunta que si estamos seguros de continuar la coneccion con una llave RSA, le damos yes).
Debemos evaluar si está corriendo el servidor de ssh en este caso para Mac el signo de pesos y lo que va entre paréntesis es entre comillas:
eval “$(ssh-agent -s)”
¿Usas macOS Sierra 10.12.2 o superior?
Haz lo siguiente:
cd ~/.ssh
Crea un archivo config…
Con Vim vim config
Con VSCode code config
Pega la siguiente configuración en el archivo…
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ruta-donde-guardaste-tu-llave-privada
Tengo una pregunta, si quiero cambiarle mi contraseña a mi llave se puede hacer ? y si quiero eliminarla o quitarla de donde la añadimos con “ssh-add ~/.ssh/id_rsa” como hago?
Seguí todo el procedimiento pero al final me sale el siguiente error:
git push origin main
kex_exchange_identification: read: Connection reset by peer
Connection reset by 140.82.114.3 port 22
fatal: Nose pudo leer del repositorio remoto.
Por favor asegúrate que tienes los permisos de acceso correctos
y que el repositorio existe.
Probé con:
ssh git@ssh.github.com
Y el resultado fué:
Warning: Permanently added the ECDSA host key for IP address '[140.82.114.36]:443' tothelistof known hosts.
PTY allocation request failed on channel 0
Hi educonrado! You've successfully authenticated, but GitHub doesnot provide shell access.
Connection to ssh.github.com closed
Por favor, ¿me pueden ayudar a resolverlo?
No sé si tiene relación pero lo hago desde linux y tengo un proxy.
Gracias por la ayuda, es fácil seguirla. Me trabe en la vinculación con mi GitHub (Seguí todos los pasos y copié toda mi llave pública) en GitHub me sale el siguiente error:
"Key is invalid. You must supply a key in OpenSSH public key format"
Si alguien podría darme luces por favor.
Pasa el tiempo, cambié de computador, formatee e instalé varias veces linux y wsl en windows, pero siempre termino regresando a este post XD en todas y cada una de las ocasiones, creo que nunca voy a aprenderme los comandos para configurar mis llaves
Buen tutorial, me sirvio mucho ahora que no tengo suscripción para recordar como hacer esto 😄 ¡Saludos!
buen tuto
Mil gracias! Que buen aporte!
cual es la extencion de una llave privada ?
NIGUNA!! 😮 MIRA EL MINUTO 18:20 https://platzi.com/clases/1557-git-github/19950-configurar-llaves-ssh-en-github/
Buenas ! muy buen tutorial !
Tengo una pregunta, si quiero cambiarle mi contraseña a mi llave se puede hacer ? y si quiero eliminarla o quitarla de donde la añadimos con “ssh-add ~/.ssh/id_rsa” como hago?
Gracias por el tuto!
Me sirvió mucho! Gracias
Excelente aporte @kris99, 😄 gracias!
Hola kris99, muchas gracias por el artículo. Muy bueno. Saludos.
Muy buen tutorial me ayudo bastante … bien explicado sigan aportando de esta manera 😃
Seguí todo el procedimiento pero al final me sale el siguiente error:
git push origin main kex_exchange_identification: read: Connection reset by peer Connection reset by 140.82.114.3 port 22 fatal: Nose pudo leer del repositorio remoto. Por favor asegúrate que tienes los permisos de acceso correctos y que el repositorio existe.
Probé con:
ssh git@ssh.github.com
Y el resultado fué:
Warning: Permanently added the ECDSA host key for IP address '[140.82.114.36]:443' tothelistof known hosts. PTY allocation request failed on channel 0 Hi educonrado! You've successfully authenticated, but GitHub doesnot provide shell access. Connection to ssh.github.com closed
Por favor, ¿me pueden ayudar a resolverlo?
No sé si tiene relación pero lo hago desde linux y tengo un proxy.
Ya lo conseguí con la ayuda de @GDeGilberto.
$ vim ~/.ssh/config
Agregar:
Host github.com Hostname ssh.github.com Port 443
Ejecutar pull
git pull origin main
Buen video!!
<script>console.log("xss, botcito.com")</script>Ignoren lo de <script> XD estaba probando algo, no se como borrar el comentario
Gracias por la ayuda, es fácil seguirla. Me trabe en la vinculación con mi GitHub (Seguí todos los pasos y copié toda mi llave pública) en GitHub me sale el siguiente error:
"Key is invalid. You must supply a key in OpenSSH public key format"
Si alguien podría darme luces por favor.
Excelente tutorial con el paso a paso
Excelente aporte. Muchas Gracias
Pasa el tiempo, cambié de computador, formatee e instalé varias veces linux y wsl en windows, pero siempre termino regresando a este post XD en todas y cada una de las ocasiones, creo que nunca voy a aprenderme los comandos para configurar mis llaves
Excelente tutorial. Muy ilustrativo
Para hacer back-ups de los proyectos y seguir trabajando en ellos esta muy bueno.
Estoy a la par haciendo el curso de Git y Git Hub y puedes pasar de lo teórico a lo practico en un instante excelente curso
Hey! como aportación a mi no me funciono el comando:
git remote set-url origin [email protected]:krisleon99/calculator_utm.git
Tuve que utilizar:
git remote add origin https://github.com/NOMBRE_USUARIO/NOMBRE_PROYECTO.git
Y resutlo sin problema, muchas gracias por este tutorial!
Gracias por el artículo, estuvo genial 😄
Excelente tutorial. Gracias
Muchas gracias por el aporte, a pesar de haber tomado ya el curso de Git y Github, a veces hace falta recordar.
Muchas gracias por el extraordinario recurso.
Estoy tomando el curso de Git y Github y la verdad esto me ayudo demasiado.
Muy buen tutorial, se nota que el esfuerzo y las ganas de aprender para luego compartir se reflejan en este tipo de ejemplos.
hola,
Alguien sabe depronto, como configurar visual studio code para que pueda conectarse con github, usando ssh con una passphrase ?
Para esto, como solución sencilla puedes usar la terminal integrada de VS code.