PuTTY icon

SSH en Windows

Uno de los puntos más débiles de Windows el soporte de SSH, estándar de facto para conexiones seguras a otros sistemas. Mientras que en ambientes Linux y Mac acceder a otros sistemas utilizando SSH está a la orden del día, Windows no proporciona ni un mísero cliente con esa misión. Esto limita considerablemente la utilidad de Windows para administración de sistemas.

Por ello es necesario instalar una serie de aplicaciones que proporcionen los clientes necesarios. Dejando a un lado las opciones más completas y pesadas como instalar un OpenSSH portado a Windows o utilizar algún emulador de POSIX (cygwin o similares), el objetivo es disponer de un sistema de conexión remota, completamente operativo y utilizando software abierto.

Y por si fuera poco, también se intenta configurar adecuadamente para mejorar su funcionamiento e incluso incrementar la seguridad en el acceso.


Un cliente de SSH

PuTTY icon

PuTTY: A Free Telnet/SSH Client

PuTTY es un viejo conocido. Es la navaja suiza de los clientes soportando telnet, SSH, COM… un must-have en toda regla.

Lo habitual es bajar únicamente el cliente PuTTY pero, para esta configuración, lo recomendable es descargar el instalador de la nightly build e instalar todos los componentes que componen la suite.

La configuración predefinida en PuTTY no es la más adecuada para trabajar cómodamente. Lo primero es reconfigurarlo adecuadamente antes de crear las conexiones necesarias. Para ello, se carga el conjunto de opciones por defecto (llamadas “Default Settings“) y se debería modificar:

Usar SSH como tipo de conexión por omisión.

Es la opción por defecto en las últimas versiones pero si no es así, se deberá configurar.

Category: Session
Connection type: SSH
Desactivar el molesto aviso acústico.

Durante el uso habitual es común que se generen avisos acústicos cuando se produce un error o se activa el auto-completado del Shell. Este aviso suele ser bastante molesto y en ocasiones muy poco oportuno.

Suele ser una buena idea modificar el comportamiento para que se desactive cuando se produzca varias veces seguidas y modificarlo para que sea menos llamativo. Incluso es posible que se genere un discreto aviso cuando la ventana se encuentra minimizada.

Category: Terminal > Bell
Action to happen when a bell occurs: Visual bell (flash window)
Taskbar/caption indication: Flashing
Over-used means this many bells...: 3
... in this many seconds: 2
Seconds of silence required: 7
Incrementar el buffer.

PuTTY almacena para futuras referencias las últimas 200 líneas. En los momentos actuales, esta cantidad es claramente insuficiente y con los avances no tiene demasiado sentido tener que ejecutar continuamente un programa encargado de la paginación.
Incrementar este valor es algo casi imprescindible y muy útil cuando se ha perdido la conexión con el sistema y sólo disponemos de estas líneas para verificar qué ha pasado.

Category: Window
Lines of scrollback: 70000
Evitar el reposicionamiento del scrool.

En ocasiones estamos siguiendo un inmenso log o viendo una salida de una aplicación que genera mucha información y necesitamos parar momentáneamente el flujo de datos para comprobar algunas líneas. Hacemos click en la línea que se para pero, por desgracia, esto sólo funciona hasta que se escribe una nueva línea en la pantalla y perdemos la referencia.

Podemos deshabilitar este molesto comportamiento para permitirnos controlar en todo momento lo que se muestra en la pantalla.

Category: Window
Reset scrollback on keypress: Checked
Reset scrollback on display activity: Unchecked
Elegir un tipo de letra apropiado.

Disponer el mejor tipo de letra es algo imprescindible para la comodidad visual y evitar la fatiga tras varias horas de uso. En las últimas versiones se dispone de fuentes Clear-Type que mejorar sustancialmente la lectura en la consola.

Category: Window > Appearance
Font: Lucida Console, 9-point
Font quality: ClearType
Gap between text and window edge: 3
Modo pantalla completa.

Es posible que una de las pantallas ocupe todo el espacio completo del escritorio para disponer de mayor espacio de trabajo, por ejemplo, para dejar una ventana en segundo plano siguiendo un log. Habilitando esta funcionalidad, es posible cambiar de modo ventana a pantalla completa pulsando Alt-Enter

Category: Window > Behaviour
Full screen on Alt-Enter: Checked
Codificación de caracteres.

Todos los sistemas actuales soportan Unicode. Para evitar los “caracteres” raros en la salida, lo mejor es configurar nuestro cliente para que procese correctamente dichos caracteres

Category: Window > Translation
Character set: UTF-8
Handling of line drawing characters: Unicode
Copiar y pegar al estilo Linux.

Posiblemente este sea la mayor fuente de problemas: PuTTY utiliza una convención diferente al resto de clientes para copiar y pegar información (seleccionar para copiar y pegar pulsando el botón derecho). El resto de los clientes de todas las plataformas utilizan el botón central para pegar.

Modificar esta opción hace más sencillo migrar de un sistema a otro aunque genera rechazo a quien está acostumbrado a utilizar PuTTY desde hace mucho tiempo.

Category: Window > Selection
Action of mouse buttons: xterm (Right extends, Middle pastes)
Copiar con formato.

En ocasiones se desea copiar el texto de la pantalla tal y como aparece para enviarlo por correo electrónico. PuTTY lo copia como texto plano perdiendo todo el formato.

Para mantenerlo sólo es necesario activar el formato RTF.

Category: Window > Selection
Paste to clipboard in RTF as well as plain text: enabled
Mejorar colores en fondo oscuro.

Uno de los errores de diseño más comunes son los colores oscuros sobre fondo negro: no tienen contraste suficiente y es casi imposible verlos. Aclararlos un poco permite mejorar la visualización:

Category: Window > Colours
ANSI Blue: Red:74 Green:74 Blue:255
ANSI Blue Bold: Red:140: Green:140 Blue:255
Evitar el cierre de conexiones inactivas.

Los servidores suelen cerrar las conexiones inactivas durante cierto intervalo de tiempo para ahorrar recursos. En algunos casos, estos intervalos son ridículamente cortos por lo que es habitual perder la conexión.

Para evitarlo basta con enviar un keep-alive cada cierto tiempo indicando que el cliente sigue conectado:

Category: Connection
Seconds between keepalives (0 to turn off): 25

El servidor X

En sistemas *nix las interfaces gráficas se desarrollan sobre una arquitectura cliente-servidor que utiliza el X Window System. Curiosamente, el servidor en este sistema está instalado en el cliente que inicia la conexión y se utiliza el canal cifrado por SSH para intercambiar la información.

Windows carece de un servidor de X por lo que es necesario instalar un software capaz de suplir esta carencia. Entre las diversas alternativas se puede utilizar la versión libre denominada Xming (la versión gratuita es la 6.9), suficiente para el uso habitual. La instalación es sencilla y lo único necesario es añadirlo al arranque de Windows (basta copiar el acceso directo a la carpeta Inicio).

Pero esto no es suficiente para que funcionen las X remotas. Como se ha indicado antes, es necesario habilitar el uso de las conexiones a través del canal cifrado SSH.

Category: Connection > SSH > X11
Enable X11 forwarding: enabled

Uso de claves

Para incrementar la seguridad de las conexiones lo mejor es no depender de passwords. Este mecanismo es muy sencillo de implantar pero está expuesto a ataques de fuerza bruta intentando adivinar passwords débiles. Desde el punto de vista de administración se establecen sistemas de bloqueo cuando se detectan múltiples fallos pero es un problema difícil de atajar.

Una forma de incrementar notablemente la seguridad de las conexiones es utilizar claves SSH y desactivar el acceso basado en password (o utilizar passwords aleatorios válidos como último recurso).

El uso de claves no tiene ningún misterio ya que existen tutoriales para crear pares de clave pública/privada y usarlas en PuTTY y programas similares:

  1. Ejecutar la utilidad puttygen (viene incluido en el instalador de PuTTY) para crear el par de claves.
  2. Copiar la clave pública y escribirla en el fichero ~/.ssh/authorized_keys en la máquina a la que se quiere conectar.
  3. Configurar PuTTY para que utilice esa clave.

Pero, ¿entonces cualquiera puede obtener la clave privada en caso de un compromiso de seguridad? Por desgracia, la respuesta es sí. Para mantener la seguridad es necesario que las claves estén protegidas con contraseña a ser posible de gran calidad para que de tiempo a revocar los accesos antes de que se pueda descifrar.

Pero, ¿entonces cada vez que quiero iniciar sesión tengo que meter la clave de cifrado que encima es más complicada que la habitual? ¿No es la pescadilla que se muerde la cola? Sí, pero no. Existe una utilidad denominada agente que almacena y proporciona dichas claves para evitar tener que desbloquearlas continuamente.

PuTTY incluye una utilidad denominada pageant. Pero esta es la sorpresa del artículo: no lo vamos a utilizar. Se ve remplazado por KeePass: una pequeña utilidad para almacenar todas nuestras claves seguras (una utilidad que merecería de por sí un artículo propio) junto a una pequeña extensión (KeeAgent) que proporciona la interfaz del agente.

¿A qué es debido este cambio? Sencillamente por lo molesto e incómodo que es utilizar pageant: (i) es necesario cargar una a una las claves a “memorizar” y desbloquearlas con sus respectivos passwords y (ii) las claves quedan disponibles indefinidamente hasta que se eliminan o se cierra el programa. Para el primer punto existen algunos rodeos que alivian el problema de la carga de claves mientras que el segundo queda sin solución.

Lo único necesario es descargar e instalar KeePass (versión 2 también denominada “Professional”) y descargar, descomprimir el plugin y copiar el fichero KeeAgent.plgx a la carpeta donde se instaló KeePass. Tras la instalación, se debe crear una entrada en KeePass con el password utilizado para cifrar la clave privada y añadir como adjunto el fichero ppk con la clave.

Configurar una clave para SSH en KeeAgent (paso 1)

Configurar una clave para SSH en KeeAgent (paso 2)Configurar una clave para SSH en KeeAgent (imagen: KeeAgent)

Mientras que el programa esté abierto y desbloqueado (es habitual configurarlo en el arranque del sistema pero bloqueado) cualquier inicio de sesión de PuTTY enviará el desafío al agente iniciando la sesión. KeePass puede configurarse para bloquear el acceso (elimina la copia descifrada de memoria por lo que no es accesible) de forma automática cada cierto tiempo, si detecta inactividad… incrementando la seguridad.

Aún es posible llegar más lejos (literalmente) usar el agente local para autenticar máquinas remotas (por ejemplo, un SSH desde una máquina bastión a una intranet remota). De esta forma no existe ninguna copia de la clave en ninguno de los sistemas a excepción del nuestro local, lo que redunda una mayor seguridad en el caso de equipos compartidos.

Category: Connection > SSH > Auth
Allow agent forwarding: enabled
Más información
Field Commander Wieers
The Greek Stuff