Secuencia de eventos de una conexión SSH

Una cierta serie de eventos ayuda a proteger la integridad de una comunicación SSH entre dos hosts.

Primero, se crea una capa de transporte segura para que el cliente sepa que está efectivamente comunicando con el servidor correcto. Luego se cifra la comunicación entre el cliente y el servidor por medio de un código simétrico.

Después, con la conexión segura al servidor en su lugar, el cliente se autentifica ante el servidor sin preocuparse de que la información de autentificación pudiese exponerse a peligro. OpenSSH en Red Hat Linux usa claves DSA o RSA y la versión 2.0 del protocolo SSH para autentificaciones predeterminadas.

Por último, con el cliente autentificado ante el servidor, se pueden usar varios servicios diferentes con seguridad a través de la conexión, como una sesión shell interactiva, aplicaciones X11 y túneles TCP/IP.

El procedimiento de conexión en total se lleva a cabo sin grandes esfuerzos suplementales por parte del sistema local. De hecho, bajo muchos aspectos, SSH trabaja bien porque les es familiar a usuarios acostumbrados a métodos de conexión menos seguros.

En el siguiente ejemplo user1 en el sistema del cliente está iniciando una conexión SSH con un servidor. La dirección IP del servidor es 10.0.0.2, pero se podría usar su nombre de dominio en su lugar. El nombre de inicio de sesión de user1 en el servidor es user2. El comando ssh se escribe así:

[user1@machine1 user1]$ ssh user2@10.0.0.2

El cliente OpenSSH pedirá la frase de contraseña de la clave privada del usuario para descifrar la clave privada, que se utiliza para llevar a cabo la autentificación. Sin embargo, la frase de contraseña de la clave privada no se envía a través de la ya segura conexión entre el cliente y el servidor. En vez de eso, se usa la frase de contraseña para abrir el fichero id_dsa y generar una firma, que luego envía al servidor. El usuario será autentificado si el servidor tiene una copia de la clave pública del usuario que se pueda usar para verificar la firma.

En este ejemplo el usuario usa una clave DSA (también se pueden usar las claves RSA, entre muchas otras) y ve el siguiente indicador de comandos:

Enter passphrase for DSA key '/home/user1/.ssh/id_dsa':

Si por cualquier motivo llegase a fallar la autentificación de la clave pública (tal vez la frase de contraseña ha sido tecleada erróneamente o la información de autentificación no existe todavía en el servidor), por lo general se intenta otro tipo de autentificación. En nuestro ejemplo el servidor OpenSSH permite que user1 se autentifique a sí mismo con el uso de la contraseña de user2 porque la firma enviada no correspondía con la clave pública almacenada por user2:

user2@machine2's password:

Al usuario se le ofrece un indicador de comandos de shell cuando teclea la contraseña correcta. User2 debería ya tener una cuenta en la máquina 10.0.0.2 para que funcione la autentificación de la contraseña, por supuesto.

Last login: Mon Apr 15 13:27:43 2001 from machine1
[user2@machine2 user2]$ 

Llegado a este punto, el usuario puede interaccionar con la shell del mismo modo en que podría hacerlo con telnet o rsh, excepto que la comunicación está cifrada.

Otras herramientas SSH como scp y sftp trabajan de manera parecida a las herramientas inseguras rcp y ftp, respectivamente. Consulte Official Red Hat Linux Customization Guide para obtener las instrucciones y los ejemplos para usar estos y otros comandos SSH.