El servidor de shell seguro o SSH (Secure SHell) es un servicio muy similar al servicio telnet ya que permite que un usuario acceda de forma remota a un sistema Linux pero con la particularidad de que, al contrario que telnet, las comunicaciones entre el cliente y servidor viajan cifradas desde el primer momento de forma que si un usuario malintencionado intercepta los paquetes de datos entre el cliente y el servidor, será muy dificil que pueda extraer la información ya que se utilizan sofisticados algoritmos de cifrado.

La popularidad de ssh ha llegado a tal punto que el servicio telnet prácticamente no se utiliza. Se recomienda no utilizar nunca telnet y utilizar ssh en su lugar.

Para que un usuario se conecte a un sistema mediante ssh, deberá disponer de un cliente ssh. Durante el proceso de autentificación, cuando el usuario proporciona el nombre y la contraseña, se utiliza cifrado asimétrico pero en el resto de la sesión se utiliza cifrado simétrico por su menor necesidad de procesamiento.

Para instalar el servidor y el cliente ssh debemos instalar mediante apt-get el paquete ssh que contiene tanto la aplicación servidora como la aplicación cliente:

// Instalación de servidor ssh y cliente ssh
sudo apt-get install ssh

Los archivos de configuración son:

  • /etc/ssh/ssh_config: Archivo de configuración del cliente ssh
  • /etc/ssh/sshd_config: Archivo de configuración del servidor ssh

Arranque y parada manual del servidor ssh

El servidor ssh, al igual que todos los servicios en Debian, dispone de un script de arranque y parada en la carpeta /etc/init.d.
// Iniciar o Reiniciar el servidor ssh
sudo /etc/init.d/ssh restart

// Parar el servidor ssh
sudo /etc/init.d/ssh stop

Arranque automático del servidor ssh al iniciar el sistema

Para un arranque automático del servicio al iniciar el servidor, debemos crear los enlaces simbólicos correspondientes tal y como se indica en el apartado Trucos > Arranque automático de servicios al iniciar el sistema.


Conexión al servidor mediante ssh

Para conectar desde un PC cliente al servidor mediante ssh, debemos ejecutar el comando ssh seguido del nombre ó dirección IP del servidor. La conexión se realizará con el mismo nombre de usuario que estemos utilizando en el PC cliente. Ejemplo, supongamos que jessica, desde el PC llamado aula5pc3, quiere conectarse al servidor cuya IP es 192.168.1.239:
// Conexión por ssh
jessica@cliente:~$ ssh 192.168.1.239
The authenticity of host '192.168.1.239 (192.168.1.239)' can't be established.
RSA key fingerprint is 51:70:3f:9c:ac:49:52:74:88:f5:45:a6:ae:f0:9c:8a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.239' (RSA) to the list of known hosts.
Password: // Introducir contraseña de jessica
jessica@servidor:~$ // Ya estámos en el servidor

La primera vez que se conecte alguien desde dicho PC cliente, se instalará el certificado de autentificación del servidor, lo cual es normal si se trata de la primera vez. A la pregunta 'Are you sure you want to continue connecting (yes/no)?' debemos responder 'yes' ya que de lo contrario la comunicación finalizará. Si ya nos hemos conectado anteriormente otras veces y vuelve a realizar esta pregunta, significa que alguien se está haciendo pasar por el servidor (nuestro servidor ha sido hackeado) o que se ha reconfigurado el servidor (cambio de nombre, IP, etc...)

Si deseamos conectarnos al servidor utilizando un nombre de usuario diferente, debemos incluir el nombre de usuario antes del nombre o IP del servidor y separado por una arroba '@'. Ejemplo, supongamos que jessica, desde el PC llamado aula5pc3, quiere conectarse como miguel al servidor cuya IP es 192.168.1.239:
// Conexión por ssh como otro usuario
jessica@cliente:~$ ssh miguel@192.168.1.239
Password: // Introducir contraseña de miguel en el servidor
miguel@servidor:~$ // Ya estámos en el servidor como miguel

Desde PCs con Windows es posible conectarse por ssh a servidores Linux mediante el programa Putty. Se trata de un cliente ssh para Windows que permite acceder en modo texto al sistema Linux desde sistemas Windows.


Servicios adicionales

El paquete ssh no solamente nos proporciona conexión remota sino que proporciona otros servicios como ejecución remota de aplicaciones gráficas, servidor ftp seguro o copia remota de archivos.

Ejecución remota de aplicaciones gráficas

Mediante ssh existe la posibilidad de ejecutar aplicaciones gráficas en el servidor y manejarlas y visualizarlas en el cliente. El servidor ssh deberá tener activada la redirección del protocolo X, es decir, deberá tener el siguiente parámetro en el archivo de configuración /etc/ssh/ssh_config:

// Habilitar la redirección X en /etc/ssh/sshd_config
X11Forwarding yes

Ejemplo: supongamos que en nuestro terminal tenemos Damn Small Linux (que no dispone del gimp) y deseamos conectarnos a otro PC que sí que tiene instalado el editor gráfico gimp, los pasos que haremos serán:

// Ejecutar aplicaciones gráficas
jessica@cliente:~$ ssh -X cnice@192.168.1.239 // -X para redirigir Xwindows
cnice@cnice-desktop:~$ gimp // Ejecutamos el gimp

El resultado será que desde nuestro Linux sin gimp estamos manejando el gimp que se está ejecutando en el PC remoto:


Ejecución remota de la aplicación gráfica El Gimp

Desde PCs con Windows es posible conectarse por ssh a servidores Linux de forma gráfica mediante Cygwin. Se trata de un conjunto de programas libres que simulan un 'Unix para Windows' con servidor gráfico X y cliente ssh para Windows entre otras cosas, que permite acceder en modo gráfico al sistema Linux desde sistemas Windows. Otros servidores X gratuitos para Windows son Xming y Mocha.


Servidor de ftp seguro

El paquete ssh también incorpora un servidor ftp seguro y un cliente ftp seguro. Para activar el servidor ftp seguro tan solo hay que tener arrancado el servidor ssh.

El cliente ftp seguro es el comando sftp que funciona igual que el comando ftp. También podemos utilizarlo desde el navegador Nautilus escribiendo sftp://nombre-del-usuario@nombre-del-servidor por ejemplo en la url: sftp://profesor@miservidor

Cliente ftp seguro

Copia remota de archivos

También se dispone de el comando scp que permite copiar archivos desde y hacia el servidor remoto desde el cliente. Ejemplo, si el usuario jessica desea copiar el archivo /etc/hosts del servidor cuya IP es 192.168.1.239 a la carpeta actual de nuestro PC, ejecutá el siguiente comando:

// Copiar un archivo del servidor a nuestro PC
scp jessica@192.168.1.239:/etc/hosts . // Ojo no olvidar el punto al final
Password: // Introducimos la contraseña de jessica en el servidor
hosts 100% 443 0.4KB/s 00:00 // Archivo copiado

// Copiar un archivo de nuestro PC al servidor
// La carpeta de destino debe existir en el servidor
scp miarchivo.txt jessica@192.168.1.239:/home/jessica/pruebas/
Password: // Introducimos la contraseña de jessica en el servidor
miarchivo.txt 100% 443 1.6KB/s 00:00 // Archivo copiado

// Copiar una carpeta y subcarpetas de nuestro PC al servidor
scp -r /datos/*.* jessica@192.168.1.239:/pruebas/datos/
Password: // Introducimos la contraseña de jessica en el servidor
datos/*.* 100% 443 50.6KB/s 00:03 // Archivos copiados

Desde PCs con Windows es posible utilizar el programa WinSCP que permite copiar archivos desde y hacia el servidor. Se trata de un cliente que utiliza el protocolo ssh para acceder al sistema de archivos del servidor Linux desde sistemas Windows.


Identificación por certificado

Para evitar tener que introducir continuamente la contraseña cuando deseamos conectar con un servidor remoto por ssh, existe la posibilidad de autentificarse por certificado, para ello debemos:
  1. Crear un certificado de usuario en el PC cliente
  2. Copiar el certificado en el PC servidor
Para que el servidor ssh acepte la autentificación por medio de certificado, deberá tener activada la opción PubkeyAuthentication yes, es decir, deberá tener el siguiente parámetro en el archivo de configuración /etc/ssh/sshd_config:
// Permitir autentificación por certificado
PubkeyAuthentication yes


Crear un certificado en el PC cliente

Para crear un certificado que permita autentificar al usuario, debemos ejecutar el comando ssh-keygen. Dicho comando creará dentro de nuestra carpeta home, en una carpeta llamada '.ssh', dos archivos: uno llamado id_rsa que será la clave privada de nuestro certificado y otro llamado id_rsa.pub que será la clave pública de nuestro certificado. Este último archivo será el que hay que copiar en el servidor remoto.
// Creación de un certificado
miguel@cliente:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/miguel/.ssh/id_rsa):
// Archivo del certificado. Podemos dejar el que viene por defecto
Created directory '/home/miguel/.ssh'.
Enter passphrase (empty for no passphrase): // Opcional
Enter same passphrase again:
Your identification has been saved in /home/miguel/.ssh/id_rsa.
Your public key has been saved in /home/miguel/.ssh/id_rsa.pub.
The key fingerprint is:
c8:a4:fe:0c:19:78:8e:7d:05:5b:13:df:37:17:e8:ea miguel@dsl.ieslapaloma.com
miguel@dsl:~$


Copiar el certificado en el PC servidor

Para poder identificarse en el servidor como miguel desde el cliente, debemos copiar el archivo id_rsa.pub que hemos creado en el cliente, en la carpeta home de miguel en el servidor dentro de una carpeta llamada '.ssh' en un archivo llamado authorized_keys. Para copiar dicho archivo del cliente al servidor, podemos hacerlo con scp. Supongamos que el cliente se llama 'cliente' y el servidor se llama 'servidor':

// Copia del certificado y prueba de la conexión
// Nota: el símbolo ~ en Linux es la carpeta home del usuario
miguel@cliente:~$ scp ~/.ssh/id_rsa.pub miguel@servidor:~/.ssh/authorized_keys
Password: // Va a ser la última vez que introduzcamos la contraseña
id_rsa.pub 100% 242 0.2KB/s 00:00 // Copiado
miguel@cliente:~$ ssh miguel@servidor // Probamos la conexión
miguel@servidor:~$ // Ya estamos en el servidor sin necesidad de contraseña

Pregunta Verdadero-Falso
Al instalar el paquete ssh mediante el comando apt-get install ssh estamos instalando el servidor y el cliente ssh a la vez
Verdadero Falso