Configura conexiones SSH sin password en solo 3 pasos

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.


43 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav <° Linux dijo

    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.

    1.    KZKG^Gaara <° Linux dijo

      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 😉

      1.    Jesus dijo

        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.

        1.    x11tete11x dijo

          trivial acceder a los ficheros?, escuchaste alguna vez de la encriptacion del disco completo? (luks + cryptsetup)

          1.    Jesus dijo

            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.    changoleon dijo

      MMm no le hagan tanto a la mamada, si bien pueden crear una interfaz virtual, asignarle una IP y conectarse con esa IP virtual, así aunque te quiten la clave no podrán encontrar la máquina por que la clave solo funciona para una cierta IP. Además depende para que lo quieran, a mi me funciona perfectamente como lo describe el camarada, tengo un servidor privado en mi hogar no necesito aumentar la seguridad por que tiene configurada una VPN.

  2.   Samquejo dijo

    ¿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)

    1.    KZKG^Gaara <° Linux dijo

      En el terminal de Windows (cmd) estoy convencido de que no, ahí no será posible.
      No obstante si usas Putty podrías probarlo, podría funcionar.

      Saludos y bienvenido a nuestro sitio 😀

    2.    erm3nda dijo

      Putty ya acepta el parámetro -pw en comandos adiccionales. (ej: -pw12345)
      De hecho Super Putty mola más que usar Putty a secas. (Es un marco para Putty)

      Así no lo tienes que estar poniendo.

  3.   Higi dijo

    Gracias por el post, muy util. Es un tanto aburrido tanto logueo en el SSH para todo.

    1.    KZKG^Gaara dijo

      Hola y mil gracias por tu visita y comentario 🙂
      Nada amigo, todo un placer saber que te fue de ayuda… si podemos ayudarte de alguna otra forma, nosotros más que encantados 😉

      Saludos y bienvenido al sitio.

      1.    Adrianext dijo

        necesito conectarme a una pc windonws desde mi linux como lo ago desde mi terminal

  4.   Roberto dijo

    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.

  5.   Jose Gregorio dijo

    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?

    1.    KZKG^Gaara dijo

      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.

  6.   Kinon dijo

    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.

    1.    KZKG^Gaara dijo

      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

      1.    Kinon dijo

        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

  7.   Raúl dijo

    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.

  8.   German dijo

    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

    1.    Javier dijo

      Hay que configurar correctamente el servicio ssh (archivo /etc/ssh/sshd_config en PC2) para que funcione.

  9.   German dijo

    correccion…

    PC1 = Centos 6.4
    PC2= Red Hat 5.1

  10.   Grivas dijo

    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

  11.   namek dijo

    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?

  12.   Rob dijo

    Parece que despues de generar la clave hay que ejecutar ssh-add para que el agente de autenticacion pùeda usarla.

  13.   andrea colodro dijo

    como borro clave acceso no reconoce nada fui hakeada ayuda , no entra a nada

  14.   Jordan Acosta dijo

    Muchas gracias, funciono perfecto

  15.   miniminiyo dijo

    Muchas gracias por la guia! Es muy facil y viene muy bien para cuando tienes tus servidores por ahi andando y no tener que estar metiendo claves y asi autoamtizar cosas 😀

  16.   erm3nda dijo

    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!

  17.   lizz dijo

    Hola

    buen tutorial .. .pero si quiero pasar informacion ??? como puedo hacerlo?

  18.   diego gonzalez dijo

    Hola muy interesante tu aporte, pero tengo un par de dudas sobre un tema similar

  19.   Carlos Hernandez dijo

    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?

  20.   heidy dijo

    excelente!! estaba buscando una explicación asi de sencilla y funciono perfecto

    gracias!!!

  21.   Yarumal dijo

    Excelente aporte.
    Mil gracias me ha servido mucho.

  22.   Pedro dijo

    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.

  23.   Pedro dijo

    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.

  24.   Andrinho dijo

    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

  25.   Andrinho dijo

    a mi me ha sido muy util para mi modulo de fp de informatica, gracias 🙂

  26.   Vicent dijo

    Gracias!!!

  27.   x-man dijo

    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!!

  28.   Felipe Oyarce dijo

    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…

  29.   Nestor dijo

    Como puedo listar lo q hay en la maquina1 en el bash de una maquina2 sin ir me a meter ssh ip@hosts al bash de maquina1. No se si me doy a entender xD

  30.   Martin dijo

    Han pasado 10 años de esta publicacion y sigo visitandola cada que lo requiero. Como algunos otros tutoriales de aqui han superado la prueba del tiempo. Gracias y saludos!