SSH en 10 minutos o menos

Contenido

    Introducción

    SSH significa Secure SHell, y es una tecnología comunmente usada para asegurar la comunicación entre 2 computadores permitiendo enviar comandos desde un computador a otro. Veamos que es esta tecnología con una metáfora y un ejemplo técnico incluyendo como distribuir las llaves.

    Metáfora

    Explicandolo en pocas palabras, SSH es como tener una llave y un candado, donde la llave es llamada la llave privada y el candado seria la llave publica. Ahora suponga que esta en un lugar publico (internet), y encontra un casillero (un servidor) y quiere guardar sus cosas alli (datos), si sabe que nadie tiene su llave, puede colocarle su candado al casillero, y sera la unica persona con acceso a ese casillero(servidor)

    Ahora suponga que puede sacar copias de su candado, y usa esas copias para asergurar todos los casilleros, por lo tanto con solo una llave, podra acceder a todos los casilleros.

    Obviamente hay algunos riesgos, creo que el peor seria perder su llave, porque no podra abrir los candados, por lo tanto guarde la llave un un lugar serguro, pero incluso en un lugar serguro existe el riesgo de que alguien pueda acceder a su llave, en este caso, esa persona podria acceder a todos sus casilleros. Por esta razon es posible asegurar su llave con una capa extra de seguridad, una frase de seguridad. Esta frase de seguridad es una contraseña para acceder a la llave, y con esta capa extra de seguridad aunque alguien consiga su llave, no podra acceder a sus casilleros.

    Detalles Técnicos

    Creando las Llaves Publicas y Privadas

    Antes de iniciar, se necesita openssh o una herrmienta similar que utilice ssh, en caso de trabajar con Windows y utilive Git, usualmente Git batch incluye esta herramienta, de otra forma lo invito a que revise la documentación para su sistema operativa e installe la herramienta de su preferencia.

    ssh-keygen

    En la consola ejecute ssh-keygen y siga las instrucciones, este comando lo guiará paso a paso como generar las llaves publica y privada.

    ShellScript
    >Enter a file in which to save the key
    >Enter passphrase (empty for no passphrase): [Type a passphrase]
    >Enter same passphrase again: [Type passphrase again]

    La frase de seguridad es opcional, but lo recomiendo muchisimo (solo en caso que alguien obtenga su llave privada). Una vez addicionada la frase de seguridad, ssh se la preguntará cada vez que quiera utilizarla, sin embargo hay algunas herramientas que pueden facilitarnos la vida, evitando que la pregunten cada vez, como seria el caso de ssh-agent.

    Tras la finalización de la ejecución del comando, dentro de la carpeta ‘Home’ (en windows es C:\Users\yourusername) deberia haber un folder llamado .ssh, si revisa su contenido, podra ver que hay dos archivos 1. id_rsa, esta es su llave privada y 2. id_rsa.pub, esta seria la llave publica.

    Puede encontrar todas las opciones de este comando en https://www.ssh.com/academy/ssh/keygen.    

    ssh-agent y ssh-add

    En caso de haber usado la frase de seguridad, puede usar estos 2 comandos para evitar escribir la frase cada vez que use ssh.

    ssh-agent es el administrador de la llaves desencriptadas, y ssh-add es el comando para adicionar estas llaves, cuando adiciona una llave, el comando preguntará por la frase de seguridad, y en los siguientes usos no le preguntará de nuevo.

    Sistemas operativos basado en linux usualmente vienen con estos 2 comandos y ssh-agent es iniciado automaticamente cuando inicia el sistem, por lo que solo tendra que usar ssh-add. En caso de Windows, este no lo trae instalado por defecto, por lo que tendra que hacerlo (pero en caso que tenga git bash instalado, este los trae, pero no se inician automaticamente).

    El comando para iniciar el administrado es

    ShellScript
    > eval `ssh-agent`

    Opcionalmente puede indicarle la ubicación de la llave privada, en caso de que maneje multiples llaves privadas o en caso que no este utilizado el directorio por defecto (.ssh)

    El comando para adicionar la llave al administrador es

    ShellScript
    > ssh-add

    Uso Windows en mi computador personal y tengo Git bash (amo usarlo), por lo que adicioné un archivo .profile en mi directorio home para crear un alias que ejecute los 2 comandos de una sola vez. el alias es el siguiente:

    ShellScript
    > alias auth='eval `ssh-agent` && ssh-add'

    Cuando necesito usar mi llave, ejecuto:

    ShellScript
    > auth

    Distribuyendo la Llave Publica

    Una vez tenemos la llave publica y privada, solo necesitamos distribuir la llave publica en todos los servidores que requiera acceso. Sientase libre de repartir la llave publica, no forma de obtener la llave privada basada en esta.

    Usualmente aplicaciones como Github o Bitbucket permiten adicionar las llaves publicas mediante el correspondiente panel de control atraves de un navegador web.

    En caso de servidores con acceso mediante ssh, solo necesita encontrar su directorio ‘Home’ y dentro de este directorio acceder al directorio .ssh y alli su adicionar el contenido de su llave publica (copiar y pegar) al final del archivo llamado authorized_keys.

    otra alternativa es tilizando el siguiente comando

    ShellScript
    > ssh-copy-id youruser@server.com

    Este comando preguntará por su contraseña y una vez autenticado, el comando realizará exactamente lo mismo que ya mencioné anteriorment (adicionar la llave publica la final del archivo authorized_keys)

    Usando SSH

    Tras configurar todo correctamente, para conectarse a un servidor basta con ejecutar el siguiente comando:

    ShellScript
    > ssh youruser@server.com

    En el nombre del servidor pude utilizar la dirección IP en caso que el servidor no tenga dominio configurado.

    una vez dentro del servidor, se crea lo que se conoce como un tunel seguro, donde todo el trafico queda encryptado usando las llaves (publica y privada)y en caso de que alguien intercepte los datos, le seran inutiles debido a la misma encriptación.

    Conclusión

    El concepto detras de SSH es muy simple y nos permite crear conexiones segurar con servidores.

    Gracias por leer.

    Commentarios

    Leave a Reply

    Your email address will not be published. Required fields are marked *