2. Acceso remoto (SSH)

2.1. ¿De qué va este tema?

Se trata de administrar un servidor de forma remota usando una consola segura. Es decir, resolver las siguientes cuestiones:

  1. ¿Cómo me conecto de forma segura a un equipo remoto?

  2. ¿Cómo ejecuto comandos de forma remota?

  3. ¿Cómo administro diferentes equipos, desde uno solo?

2.2. Clases

Le dedicaremos unas 8 sesiones de clase.

2.2.1. La Consola Remota (SSH)

  1. Consolas seguras: Secure Shell (SSH)

    1. telnet -> r-commands -> ssh(1)

    2. Estándar Aplicación (L7). Criptografía asimétrica

  2. Suite completa ( OpenSSH ) para tener un canal seguro: protocolo + servicio + comando:

    1. Consola Segura (ssh) y Servidor de Consolas Seguras (sshd)

    2. Transferencia de Archivos segura (y servidor sFTP)

    3. Gestión de claves y agente de usuario

    4. … y más (túneles, vpn, etc).

  3. Credenciales: Necesitas una IP y acceso de administración (root)

  4. Acceso Seguro: conectividad usando ssh

Actividad. Trabajo en consola

Es necesario revisar el Repaso de Consola Unix y poder ejecutar comandos en una consola (ideal si es remota). Si no tienes una máquina (física o virtual) usa la Shell de Google (ssh vía web).

2.2.2. Configuración de SSH

  1. Comprueba que está instalado (suele estar de forma predeterminada)

  2. Comprobar que funciona (systemctl) y quien lo usa (logs)

  3. Revisa la configuración del servicio

    1. Del cliente: ssh_config(5)

    2. Del servidor: sshd_config(5)

  4. Permite una configuración avanzada del servicio, por ejemplo:

    • Quien puede (y quien no) acceder

    • Qué tipo de sistema utilizar (con usuario/contraseña o con claves)

    • Cambiar el puerto de escucha

    • Y … muchas cosas más

Actividad. Revisa el servicio SSH de tu máquina

  1. ¿En qué archivo está la configuración del servicio?

  2. ¿En qué archivo está la configuración de los todos los clientes ssh?

  3. ¿En qué archivo está la configuración del usuario root de la máquina?

  4. Crea un usuario de prueba (p.ej user1)

  5. Conéctate a ese usuario (con usuario / contraseña)

  6. Pon un mensaje de bienvenida: «Entrando en la consola ssh»

  7. El usuario root no se podrá conectar vía ssh

  8. Añade la autenticación por claves

  9. Quita la posibilidad de autenticación vía usuario / contraseña (con cuidado)

  10. Cambia el registro de log a DEBUG2

2.2.3. Acceso Seguro (con claves compartidas)

Configuración de Claves :

  • Crear Claves (.key y .pub) - ssh-keygen(1)

  • Intercambia las Claves:

    1. Guarda tu clave privada (archivo .key)

    2. Envía tu clave pública (ideal con extensión .pub)

  • Revisa el directorio .ssh - ssh_config(5)

  • Acceso remoto:

    1. En el servidor, añades tu clave pública en $HOME/.ssh/authorized_keys (del usuario en el que quieras entrar remotamente)

    2. Usando tu clave privada

    3. Usas el comando ssh (con la opción -i)

  • Caso particular con Vagrant ( use ssh instead of vagrant ssh ):

    1. Copiar la configuración ssh de vagrant (vagrant ssh-config)

    2. Carga ese archivo de configuración (ssh -F) o usa un Alias en .ssh/config

    3. Revisa el archivo de configuración ssh (para entender qué hace)

Actividad. Uso de ssh en Vagrant

Supongamos que tienes tu máquina base creada y funcionando (te puedes conectar vía vagrant ssh):

  1. ¿Cual es la IP de tu máquina?

  2. ¿En qué puerto está escuchando ssh?

  3. ¿Qué sistema de autenticación utiliza?

  4. ¿Donde está la clave privada?

  5. ¿Está protegido con contraseña?

  6. ¿Podrias utilizar tus propias claves?

  7. ¿Cómo lo harías?

Actividad. Conéctate vía ssh usando claves (público/privadas)

Crea dos Claves compartidas:

  1. Una que se llame (mi_clave)

  2. Otra que se llame (mi_clave_root)

  3. ¿Puedes ver cual es la clave privada y cual la pública? Ojo que las dos son de la misma clave asimétrica.

Conéctate a user1 sin utilizar contraseña (con las claves mi_clave):

  1. Crea tu clave pública y privada

  2. Haz una copia de seguridad

  3. Accede de forma remota

Conéctate a root sin utilizar contraseña (con las claves mi_clave_root):

  1. Revisa la configuración de SSHD (que acepte root)

  2. Crea las claves e intercámbialas

  3. Accede de forma remota

2.2.4. Configuración cliente ssh

  1. En el archivo $HOME/.ssh/config -> ssh_config(5)

  2. Crear alias de conexión. Por ejemplo ssh u1 debe conectarme automáticamente a la máquina remota en el usuario user1

  3. Ejecutar comandos en remoto (con ssh). Simplemente añadir el comando (o comandos o script).

Actividad. Conéctate vía ssh usando claves (público/privadas)

  1. Crea un alias de conexión para una máquina y un usuario. Por ejemplo te conectas poniendo ssh mi_maquina.

  2. ¿Puedes ver los archivos que hay en /home?, sin conectarte

  3. ¿Puedes ver los procesos que se ejecutan en el sistema remoto?

  4. ¿Puedes ejecutar un script en remoto?

  5. ¿Puedes mostrar las últimas 10 líneas del log?

2.2.5. Usar Múltiples Llaves

  1. Hay diferentes escenarios:

    1. Con la misma clave en diferentes máquinas

    2. Con la misma clave en la misma máquina (y diferentes usuarios)

    3. Con la un par de claves por usuario y máquina

    4. El tuyo: escoge el que te convenga (según nivel de responsabilidad y acceso)

    5. Ideal: pocas y bien gestionadas (y con copia de seguridad).

  2. Uso de un Agente de Usuario - ssh-agent(1)

    1. ¿Qué es? Un software que gestiona las claves creando …

    2. Variables de Entorno en tu consola (revisa env(1))

  3. Uso de múltiples Claves - ssh-add(1)

    1. Cargar Claves

    2. Listar Claves

    3. Borrar Claves

Actividad. Usa múltiples claves (sin reescribirlas continuamente)

  1. Lanza el agente de usuario

  2. ¿Cuales son las variables de entorno asociadas?

  3. Carga al menos dos claves en el sistema

  4. ¿Cómo usarías las claves para conectarte a un servidor remoto?

  5. ¿Qué claves tienes cargadas?

  6. Borra todas las claves

  7. ¿Cómo lanzo el agente de usuario al conectarme?