Pequeños trucos de SSH

En este artículo se recopilan nuestros mejores consejos para un uso más eficaz de SSH. Aprenderás cómo:

  • Agregar un segundo factor a la sesión SSH
  • Usar el reenvío de agente de manera segura
  • Salir de una sesión SSH atascada
  • Mantener una terminal permanente abierta
  • Compartir una sesión de terminal remota con un amigo (¡sin Zoom!)

Agregar un segundo factor a tu SSH

Se pueden añadir segundos factores de autenticación a tus conexiones SSH de cinco maneras diferentes:

  1. Actualizar tu OpenSSH y usar claves de cifrado. En febrero de 2020, OpenSSH añadió soporte para claves de cifrado FIDO U2F (Universal Second Factor). Esta es una nueva función excelente, pero hay un detalle: solo aquellos clientes y servidores que se actualicen a la versión OpenSSH 8.2 o superior podrán utilizar claves de cifrado, ya que la actualización de febrero introduce nuevos tipos de claves. Con el comando ssh –V puedes comprobar la versión del cliente SSH, y para la versión del servidor utiliza el comando nc [servername] 22

    La versión de febrero añadió dos nuevos tipos de claves: ecdsa-sk y ed25519-sk (junto con los certificados correspondientes). Para generar un archivo de clave, simplemente inserta tu clave de cifrado y ejecuta el comando:
    $ ssh-keygen -t ecdsa-sk -f ~\/ .ssh\/id_ecdsa_sk

    Esto creará claves pública y privada y las vinculará a tu dispositivo U2F. La tarea de la clave privada en el dispositivo U2F es descifrar el descriptor secreto de la clave en el disco cuando la clave de cifrado esté activa.

    Además, como segundo factor puedes proporcionar una frase de acceso para tus claves.

    Una clave residente es otro tipo de generación de claves -sk- admitido por OpenSSH. Con este enfoque, el descriptor se almacena en el dispositivo U2F y te permite tenerlo disponible con la clave de cifrado cuando sea necesario. Puedes crear una clave residente con el comando:

    $ ssh-keygen -t ecdsa-sk -O resident -f ~\/ .ssh\/id_ecdsa_sk

    Luego, para recuperar el descriptor de nuevo en la memoria de un nuevo dispositivo, inserta la clave de cifrado y ejecuta el comando:

    $ ssh-add -K

    Al conectarte a un host, aún necesitarás activar la clave de cifrado.

  2. Utiliza PIV+PKCS11 y Yubikey. Para conectarte a dispositivos con versiones anteriores de SSHD, será necesario un enfoque diferente con la clave de cifrado. En Yubico hay una guía sobre el uso de U2F+SSH con PIV/PKCS11 (en inglés). No es lo mismo que FIDO U2F, y aunque el método funciona, requiere un gran esfuerzo entender qué magia lo impulsa.
  3. Aplicar el agente SSH yubikey-agent personalizado. Filippo Valsorda escribió un agente SSH para Yubikeys. Es completamente nuevo y contiene un mínimo de funcionalidades.
  4. Usar Touch ID y sekey. Sekey es un agente SSH de código abierto que almacena claves secretas en un enclave seguro de Mac y permite el uso de Touch ID para la función de acceso.
  5. Usar Single Sign On SSH. He escrito un tutorial para ayudar a configurar este método (inglés). Una de las ventajas del single sign on SSH es la posibilidad de aplicar políticas de seguridad de su proveedor de identidades, incluyendo soporte para autenticación multifactor (MFA).

Uso seguro del reenvío de agentes

En SHH, el reenvío de agentes permite que un nodo remoto acceda al agente SSH de su dispositivo local. Cuando utiliza SSH con el reenvío de agentes habilitado (generalmente a través de ssh -A), hay dos canales en la conexión: su sesión interactiva y el canal para el reenvío de agentes. A través de este canal, el socket Unix creado por su agente SSH local se conecta al nodo remoto. Este es un método arriesgado, ya que un usuario con acceso root en el dispositivo remoto puede acceder a su agente SSH local y potencialmente hacerse pasar por usted en la red. Al usar el agente SSH estándar del paquete Open SSH, ni siquiera se dará cuenta de que esto ha ocurrido. Tener una clave U2F (o Sekey) le ayudará a bloquear eficazmente cualquier intento de acceso no autorizado a su agente SSH.

Incluso con esta medida de precaución, será una buena idea usar el reenvío de agentes lo menos posible. No debe usarse en cada sesión; utilice el reenvío de agentes solo cuando esté seguro de su necesidad para la sesión actual.

Salir de una sesión congelada

Interrupciones de la red, comportamientos incontrolados de programas o una secuencia de control que bloquea la entrada del teclado son todas posibles causas de la ruptura de una sesión SSH.

Puede terminar una sesión congelada de varias maneras:

  1. Cerrar automáticamente al interrumpir la red. En su .ssh/config debe agregar lo siguiente:
    ServerAliveInterval 5
    ServerAliveCountMax 1

    ssh enviará un eco al nodo remoto cada ServerAliveInterval segundos para verificar la conexión. Si más de ServerAliveCountMax ecos no reciben respuesta, ssh cerrará la conexión por timeout y saldrá de la sesión.

  2. Salir de la sesión. SSH utiliza por defecto el símbolo ~ (tilde) como carácter de control. El comando ~. cierra la conexión abierta y te devuelve a la terminal. (Las secuencias de control solo se pueden introducir en una nueva línea). El comando ~? mostrará una lista completa de los comandos disponibles en esta sesión. Ten en cuenta que para escribir el símbolo ~ en teclados internacionales, puede ser necesario presionar la tecla ~ dos veces.

¿Por qué ocurren sesiones bloqueadas? En los primeros días de Internet, las computadoras rara vez se movían. Ahora que usas laptops y cambias entre varias redes WiFi IPv4, tu dirección IP cambia. Dado que SSH depende de conexiones TCP, y estas dependen de un punto final con una dirección IP estable, cada vez que cambias de red, tus conexiones SSH pierden el descriptor de socket y, de hecho, se pierden. Cuando cambia tu dirección IP, a tu pila de red le toma tiempo detectar la pérdida del descriptor. Cuando hay problemas de red, no queremos que uno de los nodos en la conexión TCP la interrumpa demasiado pronto. Por eso, el protocolo intentará retransmitir datos varias veces antes de rendirse. Mientras tanto, en tu terminal, la sesión parecerá estar colgada. IPv6 añade algunas características relacionadas con la movilidad que permiten al dispositivo mantener la dirección de casa durante el cambio de red. Quizás algún día esto deje de ser un problema.

Cómo mantener una terminal persistente abierta en un nodo remoto

Existen dos enfoques diferentes para mantener la conexión al cambiar entre diferentes redes o si deseas desconectarte temporalmente.

1. Utilizar Mosh o Eternal Terminal

Si realmente necesita una conexión que no se caiga, incluso cuando cambia entre redes, use la shell móvil Mosh. Es una shell segura que primero utiliza un apretón de manos SSH y luego cambia a su propio canal cifrado durante toda la sesión. Así, Mosh crea un canal separado, muy resistente y seguro, que puede soportar interrupciones de Internet, cambios en la dirección IP de su laptop, caídas de red severas y mucho más, todo gracias a la magia de las conexiones UDP y al protocolo de sincronización de Mosh.

Para usar Mosh, deberá instalarlo en el cliente y en el servidor, y abrir los puertos 60000-61000 para el tráfico UDP no conectado hacia su host remoto. Posteriormente, para conectarse, será suficiente con usar mosh user@server.

Mosh opera a nivel de pantallas y pulsaciones de teclas, lo que le brinda varias ventajas sobre el envío de un flujo binario estándar de entrada y salida entre el cliente y el servidor SSH. Si necesitamos sincronizar solo pantallas y pulsaciones de teclas, recuperar una conexión interrumpida es mucho más fácil. Mientras que SSH almacena en búfer y envía todo lo que ha ocurrido, Mosh solo necesita almacenar en búfer las pulsaciones de teclas y sincronizar el último cuadro de la ventana de terminal con el cliente.

2. Usar tmux

Si desea "entrar y salir cuando quiera" y mantener una sesión de terminal en un nodo remoto, use un multiplexor de terminal tmux. Me encanta tmux y lo uso constantemente. Si su conexión SSH se interrumpe, para volver a su sesión de tmux solo necesita reconectarse e ingresar tmux attach. Además, tiene funciones maravillosas como pestañas y paneles dentro del terminal, similares a las pestañas en el terminal de iOS, y la posibilidad de compartir terminales con otros.

A algunos les gusta embellecer su tmux con Byobu, un paquete que mejora significativamente la usabilidad de tmux y agrega muchos atajos de teclado. Byobu viene con Ubuntu y es fácil de instalar en Mac a través de Homebrew.

Dividir una sesión remota de terminal con un amigo

A veces, al depurar problemas complejos en sus servidores, puede surgir el deseo de compartir una sesión SSH con alguien que no está en la misma habitación que usted. ¡Tmux es perfecto para esta tarea! Solo necesita seguir unos pocos pasos:

  1. Asegúrese de que tmux esté instalado en su nodo bastión o en cualquier servidor con el que planea trabajar.
  2. Ambos tendrán que conectarse por SSH al dispositivo usando una sola cuenta.
  3. Uno de ustedes debe iniciar tmux para comenzar la sesión tmux.
  4. El otro debe ejecutar tmux attach.
  5. ¡Voilá! Tienen una terminal compartida.

Si desea sesiones tmux multiusuario más sofisticadas, pruebe tmate, un fork de tmux que simplifica enormemente las sesiones compartidas de terminal.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster