Cómo activar SSH en Ubuntu

Es posible que tu distribución de Ubuntu no tenga instalado por defecto un servidor SSH. Para comprobar los servidores que tienes instalados y escuchando, puedes utilizar el programa netstat:

# sudo netstat -tlpn
Conexiones activas de Internet (solo servidores)
Proto  Recib Enviad Dirección local         Dirección remota       Estado       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               ESCUCHAR    1454/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               ESCUCHAR    1409/sshd
tcp        0      0 0.0.0.0:445             0.0.0.0:*               ESCUCHAR    1116/smbd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               ESCUCHAR    1470/mysqld
tcp        0      0 0.0.0.0:139             0.0.0.0:*               ESCUCHAR    1116/smbd
tcp6       0      0 :::8080                 :::*                    ESCUCHAR    1582/apache2
tcp6       0      0 :::22                   :::*                    ESCUCHAR    1409/sshd
tcp6       0      0 :::445                  :::*                    ESCUCHAR    1116/smbd
tcp6       0      0 :::139                  :::*                    ESCUCHAR    1116/smbd

(Puede que necesites activar el comando sudo para tu usuario)

En este caso, tengo el programa sshd escuchando en el puerto 22. También lo podríamos haber comprobado buscando entre los paquetes instalados:

# dpkg --get-selections | grep openssh-server
openssh-server                                  install

En caso de que no lo tengas, para activar el servidor SSH, simplemente hay que instalar el paquete openssh-server.

# sudo apt-get install openssh-server

Una vez instalado, ya puedes utilizar un cliente SSH, como Putty, para conectarte a tu servidor.

Puedes también modificar las configuraciones del servidor (cambio de puerto, etc…) en el siguiente fichero de configuración:

/etc/ssh/sshd_config

y para cargar las nuevas configuración, recargar el servidor:

# sudo service ssh restart

¡Y listo!

Clientes para conexión remota (PuTTy, SecureCRT…)

En mis comienzos con el Telnet y SSH y las conexiones con máquinas remotas utilizaba PuTTy, una herramienta que me enseñó mi querido colega Roberto Andradas en alguna clase de EDI o MTP… jeje, qué tiempos.

Investigando en su momento descubrí PuTTy Tray, un interesante proyecto que ofrecía ciertas mejoras al tradicional cliente de PuTTy. Entre otras, transparencias, poder minimizar directamente al System Tray, mejorar la portabilidad, linkar desde PuTTy a un navegador las URLs…

En la actualidad, debido al inmenso número de máquinas que administro en el trabajo, tuve que hacer un cambio obligado de cliente SSH. Con PuTTy lo intenté, a través del PuTTy Session Manager, que proporciona una nueva ventana en la que se pueden visualizar de forma ordenada las sesiones guardadas, para acceder directamente a ellas.

Pero debido a que para acceder a ciertas máquinas tengo que saltar pasando por otras…. y PuTTy no ofrece generar scripts que automaticen esta tarea, al final tuve que recurrir al cliente SecureCRT, que aunque es de pago, ofrece bastantes mejoras para poder trabajar con varias terminales a la vez. Entre otras cosas, permite ejecutar scripts y comandos en varias ventanas a la vez… bastante útil cuando administras muchas máquinas.

En definitiva, cada cliente tiene sus ventajas e inconvenientes, dependiendo del uso que se le va a dar… por eso, es mejor ir probando cada uno, hasta encontrar el que realmente se ajuste a tus necesidades. A pesar de todo, yo sigo abriendo de vez en cuando mi querido PuTTy 🙂 .

Eliminar procesos «zombies» de SSH

Hay veces que con SSH se cierran mal las conexiones, y se quedan procesos abiertos (zombies) en la máquina que tiene el demonio de SSH.

Ejemplo:

#ps -ef
calidad   7762  7761  0 Nov03 ?        00:00:00 [scp] <defunct>
root      1898  2384  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   1913  1898  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   1914  1913  0 Nov03 ?        00:00:00 [scp] <defunct>
root      4664  2384  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   4669  4664  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   4670  4669  0 Nov03 ?        00:00:00 [scp] <defunct>
root      6344  2384  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   6349  6344  0 Nov03 ?        00:00:00 sshd -i -f /etc/ssh/sshd_config
calidad   6350  6349  0 Nov03 ?        00:00:00 [scp] <defunct>

Para eliminar estas sesiones que se quedan sin cerrar correctamente, se puede enviar la señal de reinicio al proceso de SSH, por cada una de las sesiones mal cerradas:

pstree -cpal | egrep [s]shd | perl -lne '($i)=(/(d+)/); `kill -1 $i`'

Con esto conseguimos que se reinicien todas las conexiones de SSH que tiene la máquina.

(Recuerda que hay que tener Perl instalado para poder ejecutar el comando anterior).

Ejecución de aplicaciones remotas a través de SSH

Puede interesarnos ejecutar aplicaciones remotas en otras máquinas a través de SSH, y si ya lo planteamos como una tarea automática, más.

Aquí dejo un ejemplo de cómo se podría hace con SSH.

$ ssh -i /home/kardinal/.ssh/id_rsa_mon -l kardinal plan01.wnet "/aplicaciones/launcher/script.sh"

donde…

/home/kardinal/.ssh/id_rsa_mon es un fichero que contiene la clave pública del usuario.
kardinal es el usuario.
plan01.wnet es el host.
/aplicaciones/launcher/script.sh es la ruta de la aplicación en el host remoto.

Personalizar el mensaje de bienvenida SSH

A la hora de logearnos en un servidor SSH, éste nos muestra un mensaje, llamado banner de bienvenida, que suele mostrarse antes de pedir la contraseña.

Una vez nos hayamos logeado correctamente, el servidor muestra otro mensaje, que también se puede configurar.

Configuración del banner de bienvenida:

etc-issue.net

$ sudo vi /etc/issue.net

En ese fichero editamos el mensaje, y lo guardamos. A continuación tenemos que editar el siguiente fichero de configuración:

$ sudo vi /etc/ssh/sshd_config

En éste, tenemos que buscar la línea «Banner /etc/issue.net«, y descomentarla, o crearla si no existe.

Configuración del mensaje posterior al logeo satisfactorio:

var-run-motd

Simplemente tenemos que editar el siguiente fichero:

$ sudo vi /var/run/motd

En el que escribiremos el mensaje que queremos que aparezca…

Ahora si queremos que los cambios hechos tengan efecto de inmediato, reiniciamos el servidor SSH.

$ sudo /etc/init.d/ssh restart

Aunque he comprobado que este paso no es necesario.