4.5.1. Instalación

debian, descontados adicionales, dispone de tres paquetes relacionados con openssh:

  1. openssh-client, que instala el cliente y que viene de serie incluso en la instalación más básica.

  2. openssh-server, que instala el servidor en sí.

  3. El metapaquete ssh, que instala los dos anteriores.

Así pues, basta con hacer:

# apt-get install ssh

para proceder a la instalación del servidor, la cual, además, dejará el servidor en funcionamiento. Como en el caso de cualquier otro servicio, pueden usarse tanto invoke-rc.d como systemctl para manipularlo.

4.5.2. Configuración

Todo la configuración del servidor se encuentra dentro del directorio /etc/ssh:

  • Las claves pública y privada del servidor con nombre ssh_host_*. Hay varias parejas porque se generan con varios algoritmos de cifrado[1].

  • El fichero ssh_config, que es, en realidad, el fichero general de configuración del cliente.

  • El fichero sshd_config, que será el que tengamos que editar si queremos alterar la configuración.

El fichero está profusamente comentado y, además, tiene página de manual propia por lo que aquí sólo se comentarán algunas directivas que se consideran de interés. En este fichero las directivas tienen su valor predeterminado, por lo que comentar o dejar descomentada una línea, tiene el mismo efecto, si no se modifica además el valor:

Port 22

Es el puerto de escucha. Lo habitual es que el servicio SSH escuche en el puesto 22/TCP y que este valor no se cambie. Es posible, sin embargo, que este puerto sea inaccesibles desde redes remotas fiscalizadas por un cortafuegos[2]:

PermitEmptyPasswords no

Por razones de seguridad lo habitual es impedir que usuarios con contraseña vacía puedan acceder al servidor:

PermitRootLogin   prohibit-password

Define si el administrador puede directamente ingresar en el servidor. Lo aconsejable es impedirlo, porque en cuanto un servidor SSH es accesible, arreciando los ataques de fuerza bruta y es muy común que uno de los usuarios de los que prueben contraseñas sea root. El valor predeterminado es que el acceso sólo se permita mediante el uso de certificado de usuario:

AllowTcpForwarding   yes

AllowTcpForwarding habilita la posibilidad de hacer los utilísimos túneles SSH. Si se desea realizar una desconexión automática tres un tiempo de inactividad (p.e. 180 segundos) puede hacerse:

ClientAliveInterval 180
ClientAliveCountMax 0

lo cual es muy útil para evitar que se queden inadvertidamente abiertas sesiones[3].

Advertencia

A partir de la versión 8.2 (véanse las notas de lanzamiento), esta configuración ya no funciona, porque dar un valor de 0 a ClientAliveCountMax deshabilita el mecanismo que provocaba la desconexión automática (y que se explica en la nota al pie anterior). No hay, pues, forma de que el servidor fuerce la desconexión, pero sí de que lo haga el propio cliente, si así se fijó en su configuración dentro de /etc/ssh/ssh_config o ~/.ssh/config:

ServerAliveInterval 180
ServerAliveCountMax 0

o se decidió al conectar:

$ ssh -o "ServerAliveInterval=180" -o "ServerAliveCountMax=0" usuario@servidor

ya que para ServerAliveCountMax=0 el efecto sigue siendo el mismo.

Por otro lado:

Banner      /etc/ssh/ssh_banner

define el fichero cuyo contenido se mostrará justamente tras la conexión y antes de la autenticación[4]. El valor predeterminado es none, o sea, ninguno. También puede mostrarse un mensaje después de haberse autenticado por completo:

PrintMotd  yes

En este caso, se mostrará el contenido de /etc/motd.

DenyGroups     vetados
AllowGroups    ftpusers administradores

Las directivas DenyUsers, AllowUsers, DenyGroups y AllowGroups permiten indicar usuarios y groups a los que se les permite (exclusivamente) o niega el acceso. El usuario entrante debe cumplir con todas las directivas incluidas en el fichero. En el ejemplo, sólo podrán acceder al servidor los usuarios que pertenezcan al grupo ftpusers o administradores y que, además, no pertenezcan al grupo vetados:

MaxStartups    3

MaxStartups indica el máximo número de conexiones no autenticadas simultáneas que admite el servidor[5]. En el ejemplo, por tanto, sólo podrá haber tres peticiones de autenticación produciéndose a la vez. Es útil ajustar este valor para minimizar los riesgos de ataques de fuerza bruta.

Match Group    ftpusers
   X11Forwarding        no
   AllowTcpForwarding   no
   ForceCommand         internal-sftp

La directiva Match da la posibilidad de sobrescribir la configuración global para las conexiones que cumplan los criterios especificados[6]. Por ejemplo, en este caso, a los usuarios que pertenecen al grupo ftpusers sólo se les permite el uso del servidor para transferir ficheros[7].

Ver también

Si el servidor SSH se expone en internet, no tardará en recibir ataques de fuerza bruta que persiguen el acceso a la máquina. Siempre es más que recomendable configurar algún mecanismo que los inutilice.

4.5.3. Clientes

Por clientes del servidor entenderemos bajo este epígrafe sólo aquellos destinados a la administración interactiva del servidor.

4.5.3.1. OpenSSH

Es el cliente habitual en sistemas unix. El modo básico de usarlo es el siguiente:

$ ssh usuario_remoto@servidor

es decir, indicar el usuario de que se dispone en el servidor y el nombre o la ip del mismo. Si se omite el nombre de usuario, se tomará el mismo que el del usuario local. La consecuencia de esta orden es que se abrirá una consola interactiva (una sesión de la shell predefinida para tal usuario) en el servidor, tal como si hubiéramos ingresado en la máquina local. Es posible añadir argumentos a la orden, por ejemplo:

$ ssh -p443 usuario_remoto@servidor

para conectarse al puerto 443 en vez de al 22, como es habitual. Es posible también ejecutar un comando en el servidor sin llegar a usar el nodo interactivo simplemente añadiéndolo a continuación:

$ ssh usuario_remoto@servidor ls -l

Si se prefiere también incluir la orden entre comillas:

$ ssh usuario_remoto@servidor "ls -l"

Advertencia

Las comillas cobran importancia cuando queremos evitar que el bash local haga interpretaciones de la orden (p.e. expanda), porque queremos que estas las haga el servidor remoto.

Este cliente permite incluir configuración dentro de /etc/ssh/ssh_config (configuración general) y ~/.ssh/config (configuración personal del usuario). Como en el caso de la configuración del servidor, pueden usarse directivas globales (que afectan a todas las conexiones) y particulares con Match o, en este caso, también Host. Por ejemplo:

# Configuración en ~/.ssh/config
ServerAliveInterval  120
ServerAliveCountMax  0

Host zipi
   Hostname    iescdl.es
   User        perico
   Port        443

En esta configuración hemos incluido dos directivas globales que fuerzan la desconexión del cliente tras dos minutos de inactividad. Son simétricas a las ya vistas en el servidor, y en este caso el que se desconecta es el cliente y no el servidor. Son útiles si queremos provocar desconexiones automáticas y en el servidor no se ha hecho configuración alguna al respecto.

Además se ha definido la conexión a una máquina, de manera que la orden:

$ ssh zipi

es equivalente a:

$ ssh -p443 perico@iescdl.es

Lo que no puede hacerse es añadir también la contraseña, porque openssh obliga a que esta se facilite siempre de manera interactiva. Para evitarlo, es necesario recurrir a otras estrategias.

4.5.3.2. Putty

Es el cliente más habitual en los sistemas Windows[8], aunque las últimas versiones de Windows traen el cliente de OpenSSH para su Powershell. Lo cierto es que es un excelente cliente porque es efectivo, no requiere siquiera instalación y, además, soporta otros protocolos como telnet o conexión serial, lo que lo hace utilísimo en muchos casos.

Establecer con este programa una conexión SSH básica es bastante sencillo:

  • En la pantalla inicial (la sección de «Sesión») puede definirse la máquina a la que deseamos conectarnos, el puerto, el tipo de conexión (SSH en nuestro caso) y poner un nombre a la configuración de la conexión para poder establecer la conexión en otras ocasiones sin necesidad de volver a configurar de cero. Sin embargo, si nuestra intención es afinar más la configuración es mejor acceder al resto de pantallas de configuración y una vez acabadas todas ellas, volver a esta para grabar.

    Pantalla de sesión
  • En la sección «Windows» es posible cambiar el número de filas y columnas (por ejemplo, a 120x36) lo cual es especialmente útil si decidimos que el tamaño de la fuente cambie al cambiar el tamaño de la ventana (también definible en esta sección):

    Pantalla de ventana
  • Si somos usuarios habituales de Linux, en Windows>Selection es muy conveniente ordenar que la selección se haga como en XTerm, esto es, el botón izquierdo para seleccionar y el botón central para pegar.

    Pantalla de selección
  • En «Connection>Data» podemos especificar el nombre del usuario (no la contraseña).

    Pantalla de datos

Hay otras configuraciones interesantes relacionadas con un uso más avanzado (autenticación con clave, túneles, etc.) que por ese motivo no se citan aquí.

Notas al pie