Sesiones remotas

Contenidos
Arquitectura de una sesión remota
Sesiones remotas utilizando rlogin
Sesiones remotas utilizando telnet

Sesiones remotas utilizando ssh

Iniciar una sesión remota significa conectarse desde una computadora a otra, a través de una red de comunicaciones, a los fines de ejecutar procesos a la distancia. En otras palabras, por medio de sesiones remotas es posible trabajar en una computadora operándola remotamente desde otra, ubicada quizás a grandes distancias; a los fines prácticos, resulta equivalente a estar sentado en la consola del sistema remoto.

En nuestro ejemplo, si el usuario jperez que se encuentra conectado a la computadora Antares inicia una sesión remota en Canopus, a partir de ese momento todo comando que ejecute lo hará en el procesador de Canopus.

Cabe aclarar que el acceso a un host Unix desde una terminal serial no se considera una sesión remota, por mas lejana que se encuentre físicamente ubicada la terminal. Las sesiones remotas entre sistemas Unix se realizan por medio de la ejecución de programas basados en TCP/IP, como los descriptos en las secciones siguientes.

Arquitectura de una sesión remota

Los programas de sesión remota bajo Unix trabajan según un esquema cliente/servidor, en el cual el usuario que desea iniciarla ejecuta localmente en su computadora un programa (el cliente) al cual le indica el nombre del host en el cual se iniciará la sesión. Dicho programa se comunica por medio de TCP/IP con otro ejecutándose en background en la computadora de destino (el servidor), el cual, luego de autenticar la identidad del usuario y verificar que tiene permiso para utilizar el servicio, inicia un shell para interpretar los comandos que envíe el usuario remoto:

El servidor de sesión remota asocia el shell remoto con una terminal virtual (o pseudo-tty) cuyas entradas y salidas están asociadas a una conexión de red. Así, todo lo que el usuario teclee en su terminal será capturado por el cliente de sesión remota y enviado a través de la red al shell remoto; de manera similar el shell remoto enviará la salida de los comandos al usuario por la misma conexión de red. Cuando el usuario ejecute el comando para terminar el shell (usualmente, exit o Control-D), el shell remoto finaliza y la sesión remota se cierra.

Sesiones remotas utilizando rlogin

rlogin es el comando de sesión remota nativo de Unix. Su sintaxis básica es la siguiente:

rlogin nombre_de_host

Al ser invocado de esa forma, rlogin intenta iniciar una sesión remota en el host indicado, bajo el mismo nombre de usuario actual, previo ingreso de la palabra clave:

 

Si la clave es ingresada correctamente, la sesión remota se inicia, rlogin informa la fecha y origen del último ingreso al sistema y, a partir de ese momento, el usuario puede ejecutar comandos en la máquina remota, obteniendo la salida de los mismos en el host local. Para cerrar la sesión, basta con ingresar el comando normal para finalizar el shell remoto, por ejemplo, exit:

 

Si se desea iniciar una sesión remota bajo otra identidad (es decir, entrado como otro usuario), el login name correspondiente puede indicarse utilizando el comando -l:

 

Como ya se dijo, rlogin pide la contraseña de la cuenta remota antes de permitir el acceso al shell. Sin embargo, es posible configurar rlogin de manera que considere equivalentes dos cuentas y no pida password para iniciar sesiones. Continuando con el ejemplo anterior, si el usuario jperez tiene cuenta tanto en Antares como en Canopus, para evitar que se le pida password al iniciar una sesión remota con rlogin deberá crear en su directorio de login de la máquina remota un archivo llamado .rhosts, y en el mismo listar los nombres de las computadoras desde donde desea entrar sin password. También podría otorgar acceso libre a otros usuarios, listando los nombres de login a continuación del nombre de máquina.

Por ejemplo, si el archivo .rhosts ubicado en el directorio de conexión de jperez en Canopus contuviera la siguiente información:

 

ello indicaría que el usuario jperez puede entrar a Canopus sin password desde Antares, mientras que el usuario plopez podrá hacer lo mismo desde Orión.

Cabe destacar que el uso del archivo .rhosts es un serio compromiso a la seguridad de la cuenta y es un recurso que debe ser utilizado con mucha precaución; en el ejemplo anterior, si alguien ganara acceso a la cuenta de jperez en Antares, automáticamente podría entrar a la cuenta de Canopus. Como medida extra de seguridad, rlogin solo prestará atención al archivo .rhosts si el mismo solo puede ser accedido por el usuario (es decir, si su modo es rw------- ó 600 en octal).

Sesiones remotas utilizando telnet

El comando rlogin fue diseñado teniendo en cuenta que tanto el host local como el remoto son máquinas corriendo Unix6. A fin de permitir sesiones remotas entre equipos con sistemas heterogéneos, fue diseñado otro protocolo denominado TELNET.

Bajo Unix, puede establecerse una conexión TELNET con el siguiente comando:

telnet nombre_de_host

La principal diferencia entre telnet y rlogin es que el primero de estos siempre pide usuario y password para iniciar la sesión:

 

Aquí puede verse que el usuario jperez inicia una sesión de TELNET hacia Canopus. telnet inicialmente informa que está intentando establecer la conexión con el host remoto (línea Trying....) y luego de unos segundos indicará que la conexión se ha establecido con éxito (línea Connected.....). Seguidamente, telnet informa al usuario cual es el carácter de escape, y pide el nombre de usuario y palabra clave para ingresar al host remoto.

El carácter de escape (que usualmente es Control-]) es un carácter que es interceptado por el programa telnet ejecutándose en el host local, y no es enviado al host remoto como el resto de los caracteres tipeados por el usuario. Se utiliza para llamar la atención del programa telnet, el cual responde con un prompt y queda a la espera de comandos:

 

Existen varios comandos que pueden utilizarse aquí, pero los mas usuales son el comando exit, utilizado para cortar la conexión, y ! (signo de admiración) que permite iniciar un subshell en el host local.

Sesiones remotas utilizando ssh

Tanto telnet como rlogin utilizan protocolos de comunicación abiertos, en el sentido de que todos los datos se transmiten sin ningún tipo de protección por encriptado. Esto significa que cualquier otra persona que tenga acceso al medio físico de transmisión podría (con los conocimientos y herramientas apropiadas) interceptar las transmisiones y eventualmente obtener todo aquello que el usuario tipea en su terminal (especialmente, el nombre de usuario y la password) y las respuestas que envía el host remoto.

Esto hace que el uso de telnet o rlogin sea inapropiado cuando es necesario un nivel de absoluta seguridad y privacía, especialmente cuando las comunicaciones se realizan a través de largas distancias (por ejemplo, a través de la Internet).

Para superar esos inconvenientes, puede utilizarse como alternativa el sistema ssh (por Secure Shell, o Shell Seguro), el cual provee de un esquema de seguridad mucho mas sofisticado y encripta toda el intercambio de datos entre el host local y el remoto.

La sintaxis básica7 de ssh es igual a la de rlogin, es decir:

ssh [-l nombre_de_usuario] nombre_de_host

en donde la indicación del nombre de usuario (a través del parámetro -l) es opcional y se asume el login name actual por defecto.
 


6. Estrictamente, rlogin asume que ambos extremos de la conexión de red ejecutan el demonio identd, que permite identificar el propietario de conexiones TCP.

7. Ssh ofrece sofisticados mecanismos de seguridad adicionales al tradicional esquema de seguridad basado en palabra clave, como frases clave de acceso, certificados de identidad y varios métodos de autenticación. Para mayores detalles, refiérase a la documentación provista por el software.