Configura conexiones SSH sin password en solo 3 pasos

40
53860

Hola,

Aquí verán el cómo conectarse a una PC remotamente por SSH tan solo introduciendo el password una primera vez, luego aunque reiniciemos ambos ordenadores, no se nos volverá a pedir el password.


Pero, primero veamos una breve explicación sobre qué es SSH:

SSH es un protocolo, un medio de comunicación entre dos ordenadores. Nos permite administrar un equipo de forma remota. Cuando accedamos por SSH a otro equipo, el comando que introduzcamos en esa terminal se ejecutará en el otro equipo, de esta forma lo administramos/controlamos.

Todo lo que se transmita por SSH, va encriptado y con una seguridad considerablemente buena.

Ahora, veremos como en solo tres pasos configuraremos PC#1 para que acceda a PC#2 sin introducir contraseña:

Tenemos la siguiente situación:

PC#1 -» Desea conectarse a PC#2, sin tener que escribir password cada vez que se intente conectar a esta otra PC.

PC#2 -» Tiene instalado el servidor SSH. Esta es a la que PC#1 se conectará, y lo hará sin introducir password. En esta PC hay un usuario llamado root.

Empecemos…

1. En PC#1 escribimos lo siguiente:

  • ssh-keygen -b 4096 -t rsa

Esto generará una llave pública. Para no enredarnos mucho con “llaves públicas y privadas”, lo explicaré de forma muy simple.

Supongamos que tienes dos llaves de tu casa en el bolsillo, una se la das a tu novia ya que viven juntos, y con la otra te quedas solo tú, no se la das a nadie. Bueno, esa llave que le diste a tu novia, le permitirá entrar a tu casa sin decírtelo, sin pedirte permiso no? eso es una llave pública, una “llave” que permite que una PC acceda a otra sin tener que pedirte permiso (o sea, sin poner usuario+password)

Cuando pongan ese comando, les aparecerá eso:

2. Simplemente presionemos [Enter], un segundo después volvemos a presionar [Enter], y un segundo después volvemos una vez más a presionar [Enter]. O sea, presionaríamos [Enter] un total de tres (3) veces, solo lo presionamos… no escribimos nada 🙂

Cuando hagamos esto, nos aparecerá algo muy similar a lo siguiente:

Listo, ya tenemos la llave pública… ahora falta dársela a quien queramos (como el ejemplo, dársela a nuestra novia jaja)

Lo que queremos es que PC#1 se conecte a PC#2, ya en PC#1 hicimos todo lo anterior, en PC#2 no hemos hecho nada. Bien, PC#2 tiene de dirección IP por ejemplo 10.10.0.5.

3. Ponemos en PC#1 lo siguiente:

  • ssh-copy-id root@10.10.0.5

Esto lo que hace es simplemente darle la llave pública de PC#1 a PC#2, o sea, le dá a PC#2 la llave pública de PC#1, mientras que PC#1 se queda con su llave privada, ya saben; esa llave que no se le dá a nadie. Es importante no equivocarse con el usuario, o sea, si el usuario “root” no existe en PC#2 nos dará error, es importante estar claro en qué usuario usaremos para esto, además de que ese usuario con que configuramos el acceso sin password, será el mismo con que deberemos acceder en el futuro. Una vez hecho esto nos debe quedar así:

En el paso anterior, deben poner el password del usuario en PC#2.

Y listo… ya está todo configurado 😀

Como bien nos aparece en la terminal, probemos si de veras todo funcionó 100% OK. Para probar, ponemos:

  • ssh root@10.10.0.5

Si desean acceder a otro ordenador también sin introducir password siempre (PC#3 por ejemplo), simplemente le damos nuestra llave pública y listo, o sea, una vez que hayamos hecho el paso #1 y #2 no lo tendremos que hacer nunca más. Si queremos acceder a PC#3 por ejemplo, que tiene por IP 10.10.99.156 tan solo ponemos:

  • ssh root@10.10.99.156

Hasta aquí el tutorial.

Explicar que, el nivel de seguridad cuando hablamos de SSH es realmente alto, la metáfora con que expliqué algunos pasos (la de darle la llave a nuestra novia) tal vez no sea la más adecuada jaja, ya que nuestra novia podría darle la llave a alguien más. Cuando hablamos de SSH, los principios de seguridad son fáciles de explicar, cuando intentamos acceder nuestro ordenador (PC#1) comprueba si en PC#2 hay una llave pública de nuestro ordenador (en este caso sí la hay, porque así lo configuramos), entonces, de haberla es simple, comprueba si esa llave pública es idénticamente igual a nuestra llave privada (esa que no le dimos a nadie). Si las llaves son idénticas nos deja acceder, de lo contrario y como medida de seguridad, no nos deja acceder remotamente al otro ordenador.

Así que ya saben… darle la llave de casa a nuestra novia no es lo más seguro, pero compartir llaves y acceder remotamente por SSH a otro ordenador, sí es seguro ^_^

Dudas o preguntas, quejas o sugerencias me las dejan saber.

Saludos a todos.

40 COMENTARIOS

  1. De veras no entiendo como tú siendo tan paranoico con la seguridad cometas semejante error. Si en el paso donde dice:

    Enter passphrase (empty for no passphrase)

    No escribimos nada, estamos perdido si un usuario logra acceder a nuestra PC y abrir un terminal, ya que automáticamente que ejecute:

    ssh root@10.10.0.5

    Entrará sin pedir contraseña.

    • Si alguien gana acceso a mi laptop, sí, podrá acceder a PC#2 sin necesidad de poner el password de esta, no obstante como bien dices, soy un paranoico de la seguridad, ¿crees de veras que ganar acceso a mi laptop es algo tan simple? JAJA.

      Cuando me levanto siempre, siempre bloqueo la pantalla, de lo contrario a los 30 segs de que no haya actividad en el mouse o teclado de la laptop, se bloqueará igual 😉

      • Si alguien te roba el portátil, por mucho bloqueo de la sesión que haya ganar acceso a los ficheros es trivial, cuestión de 5 minutos con un linux arrancable desde USB. Y una vez accedido a los ficheros, como la clave privada está sin protección la puede usar directamente, o mejor copiársela y acceder cómodamente desde su casa a cualquiera de tus servidores. En realidad, el proceso es tan rápido que no tendrías ni por qué enterarte. En 5 minutos que vayas al baño o a lo que sea, ya se puede hacer todo.

        La forma segura es ponerle una contraseña a la clave privada, y luego usar ssh-agent para que recuerde la contraseña durante toda la sesión (basta hacer ssh-add). De esta forma sólo pediría la contraseña la primera vez, y en la práctica tendrías conexión sin password el 90% del tiempo, además de estar protegido frente a robos o intrusiones.

          • Sí, claro, si tienes todo el disco cifrado ya es otro cantar, pero el 90% de los usuarios no lo hacen porque no saben hacerlo y en muchos casos ni siquiera les compensa. En cambio, no guardar en disco contraseñas sin cifrar o claves privadas sin proteger es algo al alcance de cualquiera, y una buena práctica en general.

            Lo de guardar las claves privadas sin protección en un disco cifrado es como aparcar el coche dejando las puertas abiertas, pero contratando un guardia de seguridad con un doberman para protegerlo. Funciona, sí, pero es mucho más fácil y eficiente directamente cerrarlo con llave.

  2. ¿Y todo esto se puede aplicar a un terminal windows que tiene que conectarse a múltiples *NIX?
    Tengo putty pero puedo usar tambien Securecrt (ahora lo tengo scripteado)

  3. Excelente.. de verdad que inspira ver éste tipo de tutoriales, me dan ganas de aportar tambien mis experiencias ya simplificadas para que la comunidad pueda aprobecharlas. Gracias de verdad desde El Salvador.

  4. me estoy conectando con una maquina con ubuntu hacia una que tiene debian pero me dar un erro en el cual no puede autenticar y por lo tanto me pide la clave.. por que sucedera esto? sera que las versiones del ssh-keygen difieren o que sera lo que esta pasando?

    • Pon acá el error que te da para poderte ayudar mejor 😉
      También, puedes intentar poniendo esto en una terminal:
      sudo mv $HOME/.ssh/known_hosts /opt/

      Esto lo que hace es limpiar las conexiones (historial de conexiones) SSH que hayas tenido.

  5. Y si quisiera usar la misma llave pública para varios servidores, lo podría hacer, o tengo que crear una llave por cada servidor al que quiera acceder? Que lo voy a probar de todos modos, pero en algún servidor inútil para no dar al traste con alguno útil.

    Gracias y saludos.

    • Yo como lo tengo hecho en mi laptop es una llave diferente para cada servidor, de hecho, creo que no es posible usar una misma llave para varios… pues el ID de cada servidor es único, como una huella dactilar 🙂

      Saludos

      • Hola señor de la arena. He estado leyendo de llaves y encontré que el par de llaves (pública y privada) sirven al servidor-cliente para enviar y recibir desafíos y así identificarse uno al otro, por lo que no tiene nada que ver con la contraseña que usas para acceder al servidor, ésta última sirve para poder “pegar” la llave pública en las de confianza del servidor. Así que puedes utilizarla en tantos como quieras o necesites.

        No sé si me expliqué, pero el chiste es que para poder utilizar tu par de llaves en otros servidores, después de haber seguido tu tuto, solo tienes que hacer:

        ssh-copy-id otro.usuario@otra.ip
        escribir tu contraseña de este otro servidor

        Y listo.
        Saludos

  6. Hola, gracias por la guía, fue la única que me sirvió. Ahora que quiero hacerlo en otro par de computadoras obtengo lo siguiente:

    $ ssh-copy-id -p 4000 lm11@148.218.32.91

    Bad port ‘umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys’

    Gracias por tu ayuda.

  7. Hice lo que ud nos indico, pero me sigue pidiendo el paswword. Aclaro esta conexion la estoy haciendo entre dos servidores linux red hat… Que mas podria ser?.

    Ya mire el /etc/ssh/sshd_config

    ya reinicie ambos servidores

    PC2= linux red hat 6.4
    PC2= linux red hat 5.1

  8. Hola compañeros, tengo la necesidad de establecer relacion de confianza entre 1 server Linux Centos 5.3 y un Unix Sco5.7 pero tengo el problema que al hacer el paso 3 de copiar la llave del Linux al Unix me aparece el mensaje /usr/bin/ssh-copy-id: ERROR: No identities found por que puede ser?

    Gracias

  9. He seguido el tutorial paso por paso. No me da ningún error, pero al final cuando me conecto desde PC1 a PC2 me sigue pidiendo la contraseña de root cada vez que me conecto.

    ¿A alguien se le ocurre que puede ser?

  10. Gracias.

    Desconocía el uso de ssh-copy-id y ha resultado bastante automático.
    La verdad es que estaba hasta el moño de estar escribiendo la contraseña, así que lo que hago es guardarla con paráfrase POR DEFECTO, cosa que se mantiene durante la sesión.

    No me importa escribirla una vez cada vez que enciendo el PC, el rollo es tener que ponerla cada vez que se desconecta o cosas así 😀

    SSH No Jutsu!

  11. Hola.

    Intente los pasos anteriores, pero al intentar copiar la llave al servidor 2 (PC2) me dice que no existe el comando.

    bash: ssh-copy-id: command not found

    Se puede hacer el copiado de la llave de forma manual?

  12. Hola, quisiera saber si existe una forma de realizar este comando ssh-copy-id. Ya que instale Open ssh para Windows, el ssh me funciona en DOS pero no tiene este comando ssh-copy-id. Quisiera saber como enviar esta clave publica al otro servidor de linux (linux server). Muchas gracias.

  13. Hola. Necesito establecer una relación de confianza entre un servido linux y un equipo Windows. Instale el SSH para Windows y me funciona. Pero este comando ssh-copy-id no esta disponible en esta herramienta.

    Saben de alguna otra forma de hacerlo sin utilizar ssh-copy-id.

    Muchas gracias por sus comentarios.

  14. Pero la cuestion de esto es poder conectar sin contraseña, si ponemos una passphrase nos pediria esa pass para conectar y no era el objetivo de esto

  15. Algunos se preocupan por lo molesto que puede ser tener que introducir el password (passphrase), para eso como bien comentan mas arriba está “user-Agent” y que además yo lo tengo configurado con Keepass y su función Auto-Type, asi que solo invoco la terminal y con la combinación de teclas que tengan configurada listo, tambien tengo “alias” por cada solicitud y todo muy fácil.

    Buen tutorial.

    Have a lot of Fun!!

  16. Muy buena info 🙂 pero tengo una duda…

    Tengo PC10 que es donde guardo la información, la información es enviada desde pc1 – pc2 – pc3, al PC10, como puedo hacer que pc1,pc y pc3, usen la misma llave para acceder sin clave a PC10.

    Saludos…

Dejar una respuesta