SERVICIO DE
TERMINAL REMOTO
Celeste Campo (
[email protected])
Carlos García Rubio (
[email protected])
TERMINAL REMOTO
Pág. 1
ÍNDICE
1.
Introducción.
2. Protocolo Rlogin.
3. Protocolo Telnet.
4. Secure Shell (SSH)
TERMINAL REMOTO
Pág. 2
BIBLIOGRAFÍA
• Básica:
– “TCP/IP Illustrated, Vol. 1 - The protocols”, W. R. Stevens.
Addison-Wesley 1994. (Chapter 26).
• Complementaria:
– “TCP/IP Protocol Suite”, 4ª Ed. B. Forouzan, McGraw-Hill, 2010.
(Chapter 20).
– “TCP/IP Tutorial and Technical Overview”. IBM Redbook. 2006.
(Chapter 13).
– “Protocol Basics: Secure Shell Protocol”, W.Stallings. The Internet
Protocol Journal, Volume 12, No.4 (Dec 2009)
• RFCs:
– RFC 1282: BSD Rlogin.
– RFC 854: Telnet Protocol Specifications.
– RFC 855: Telnet Option Specifications.
– RFC 4250-4256: SSH.
TERMINAL REMOTO
Pág. 3
Terminal remoto: Introducción (I)
• Antiguamente, para conectarse a una máquina había que hacerlo
desde un terminal:
– Físicamente conectado a la máquina.
– Necesitaba uno por máquina (host).
• Objetivo:
– Poder conectarse desde un único terminal a múltiples máquinas:
• Físicamente conectado a una.
• Se salta a través de la red de una a otra.
• Es uno de los servicios más usados y antiguos de Internet.
TERMINAL REMOTO
Pág. 4
Terminal remoto: Introducción (II)
• Dos aplicaciones proporcionan este servicio:
– RLOGIN:
• más sencillo (1.000 líneas de código).
• desarrollado para Unix (aunque portado a otros sistemas
operativos).
– TELNET
• más antiguo (origen: 1969) y complejo (10.000 líneas).
• prácticamente en cualquier implementación TCP/IP para cualquier
S.O.
TERMINAL REMOTO
Pág. 5
Terminal remoto: Introducción (III)
• Son aplicaciones cliente-servidor:
Cliente telnet
Servidor telnet
login shell
terminal
driver
TCP/IP
TCP/IP
pseudo-
terminal
driver
conexión TCP
• En cuanto al tráfico que se transmite:
– No es un tipo de aplicación que genere gran volumen de
tráfico.
– Generalmente paquetes pequeños.
– Relación 1:20 entre el número de bytes enviados por cliente
y servidor.
TERMINAL REMOTO
Pág. 6
RLOGIN
• Apareció con el 4.2 BSD (1983)
• RFC 1282 (1991):
– Tiene carácter informativo.
• Pensado para login remoto entre máquinas UNIX:
– Más sencillo que TELNET (no hay tanta negociación de
opciones como entre máquinas de distintos S.O.).
• Posteriormente portado a otros sistemas operativos
•
•
•
•
•
TERMINAL REMOTO
Pág. 7
RLOGIN: Protocolo
El cliente establece una (única) conexión TCP con el puerto 513
del servidor.
Cliente escribe (uno o varios segmentos TCP):
–
–
–
–
un \0 (byte a 0, 0x00).
nombre de “login” del usuario en el cliente, terminado por un \0.
nombre de “login” del usuario en el servidor, terminado por un \0.
nombre de tipo de terminal, seguido de “/”, seguido de velocidad,
terminado por un \0.
•
Tipo de terminal lo necesitan muchas aplicaciones a pantalla completa.
Servidor responde:
–
\0.
A continuación puede haber una parte de autenticación (ver después).
A partir de aquí cliente y servidor intercambian:
–
datos:
•
El cliente envía lo que se introduce por el teclado, carácter a carácter.
–
Cada uno en un paquete o no, según TCP los agregue en un segmento (algoritmo de
Nagle, etc).
•
El servidor envía (o no) eco carácter a carácter, y la salida del programa del
servidor (inicialmente la shell).
–
o comandos:
•
Suele intercambiarse uno de tamaño de ventana (ver después).
TERMINAL REMOTO
Pág. 8
RLOGIN: Autenticación
• Puede hacerse de dos maneras:
1. Mediante fichero rhosts:
• No se intercambia ningún mensaje por la red.
• El usuario en el servidor debe tener un fichero de texto denominado
$HOME/.rhosts.
– Si en el fichero hay una línea con “nombre_cliente login_cliente” entonces se permite el
login.
2. Solicitando un “password”:
• El servidor manda un segmento con la cadena “Password”.
• El cliente la muestra en pantalla (como cualquier otro dato que le viene del
servidor).
• El usuario teclea su clave, y el cliente la envía, carácter a carácter, como
cualquier otro dato
– ¡En claro! Posteriores mejoras basadas en Kerberos.
• El servidor no hace eco de estos caracteres.
• Comprueba que los caracteres recibidos hasta el \n se corresponden con la clave
en el servidor.
• En caso de fallo, repite el proceso durante un número de reintentos, y se sigue
fallando cierra la conexión TCP.
• Normalmente primero intenta 1, y si no funciona / existe, 2.
• Consideraciones de seguridad: rhost evita enviar la clave en claro por
la red, pero si un intruso suplanta nuestra identidad en el cliente,
automáticamente tiene acceso en el servidor.
TERMINAL REMOTO
Pág. 9
RLOGIN: Control de flujo
• En RLOGIN por defecto hay control de flujo en el cliente.
• Consiste el que hay dos caracteres que cuando los pulsa el usuario, no
se envían al servidor:
– Control-S (carácter ASCII STOP).
• Si el usuario escribe este carácter, indica al cliente que pare la escritura en el
terminal (los datos se acumularán en el búfer de recepción de TCP).
– Control-Q (carácter ASCII START).
• Reanuda la salida en el terminal.
• Por tanto, por defecto, los caracteres Control-S y Control-Q no se
envían al servidor.
• Hay aplicaciones que lo necesitan (p.ej., emacs).
• El servidor puede mandar un comando para deshabilitar / volver a
hablitar el control de flujo en el cliente (lo veremos después).
– Cuando está deshabilitado, el cliente envía los caracteres Control-S y
Control-Q al servidor, sin hacer nada en local.
TERMINAL REMOTO
Pág. 10
RLOGIN: Comandos servidor a cliente
• Son cuatro:
– Se indican con un solo byte, según valga en hexadecimal:
– 0x02:
• Flush output: pide al cliente que tire (no escriba en el terminal) todo lo que tenga
pendiente por escribir.
• Lo suele enviar el servidor al cliente después de que éste haga un control-C.
– 0x10:
• Pide al cliente que deje de hacer control de flujo (interpretar control-S y control-Q)
(lo manda cuando arrancamos una aplicación como emacs).
– 0x20:
• Pide al cliente que haga control de flujo.
– 0x80:
• El servidor pide al cliente que responda inmediatamente enviando el tamaño de la
ventana, y que notifique futuros cambios de tamaño.
• Este comando se suele enviarlo el servidor al principio del todo, justo después de
la autenticación.
• ¿Cómo se distinguen de los datos normales?
– Se envían como datos urgentes de TCP.
– El puntero de datos urgente de la cabecera de TCP indica el byte donde se
encuentra el comando.
TERMINAL REMOTO
Pág. 11
RLOGIN: Comandos de cliente a servidor
• Sólo uno: el de información de tamaño de ventana.
– Se envía como datos normales.
• No como datos urgentes, en sentido cliente->servidor hay menos
tráfico.
• Consiste en intercalar en el flujo de datos lo siguiente:
– Dos bytes 0xFF (para distinguirlo de otros datos).
– Dos bytes que corresponden al código ASCII del carácter “s”.
– 16 bits con el número de filas (p.ej. 25).
– 16 bits con el número de caracteres por fila (p.ej. 80).
– 16 bits con el número de pixels en X.
• normalmente se deja a 0.
– 16 bits con el número de pixels en Y.
• normalmente se deja a 0.
TERMINAL REMOTO
Pág. 12
RLOGIN: Caracteres especiales
• Otros caracteres especiales:
– Interrupción (Control-C):
• Se pasa al servidor sin hacer (en principio) ninguna acción.
• Interrumpirá, por tanto, el proceso que estemos ejecutando en
el servidor.
– Secuencias de escape en el cliente:
• Sirven para “hablar” directamente con el cliente de RLOGIN.
• Son el carácter ~ (justo después de un <CR>), seguido de:
– un punto: termina el cliente.
– EOF (Control-D): termina el cliente.
– Control-Z: suspende el cliente.
– Control-Y: suspende sólo la entrada pero no la salida.
• Puede servir si ejecutamos un programa muy largo en el
servidor, del que nos interesa su salida, pero queremos
seguir ejecutando otras cosas en el cliente.
TERMINAL REMOTO
Pág. 13
RLOGIN: Ejemplo 1
Establecimiento de conexión
TERMINAL REMOTO
Pág. 14
RLOGIN: Ejemplo 2
•
La captura se inicia cuando
hemos hecho:
– cat fichero_largo
– ^S
• En el instante 7.066859
hacemos:
– ^C
• En este momento el estado de
los buffers de recepción en
cliente y transmisión en servidor
es:
TERMINAL REMOTO
Pág. 15
TERMINAL REMOTO
Pág. 17
TELNET: Network Virtual Terminal
• Diseñado para conectar cualquier host (cualquier S.O.) a
cualquier terminal.
• Una conexión TCP puerto 23.
• RFC 854 - Telnet Protocol Specification (1983)
– Define el NVT (Network Virtual Terminal).
– Terminal imaginario:
• orientado a carácter.
teclado + impresora.
•
– lo que el usuario escribe en el teclado se envía al servidor.
– lo que manda el servidor al cliente, se escribe por la impresora.
– Se intercambian caracteres NVT ASCII, codificados con 8 bits.
• 128 primeros caracteres ASCII, con bit 8=0 (también conocido por US
ASCII).
– 95 imprimibles.
– 33 control (NUL(0), BELL, CR, LF...).
– Fin de línea como dos caracteres: CR LF.
• Bytes con bit 8=1 se usan para comandos.
– Tanto el cliente como el servidor deben adaptar sus terminales
reales a este terminal imaginario.
TERMINAL REMOTO
Pág. 18
TELNET: Comandos
• Señalización “en banda” en ambos sentidos.
– Entremezclada con los datos, no usa datos urgentes de TCP
con excepción del comando DM (lo veremos después).
• Comandos: se envían como dos (o más) bytes.
– Byte 0xFF (255 en decimal).
• Se conoce como byte IAC (“interpret as command”)
• El usuario no podría enviar este byte (no es NVT ASCII)
– Siguiente byte indica cuál comando (ver siguiente
transparencia).
– Dependiendo del comando concreto, puede haber más
bytes.
TERMINAL REMOTO
Pág. 19
TELNET: Comandos
236 EOF (end of file)
246 AYT (are you there?)
237 SUSP (suspend current job)
247 EC (escape carácter)
238 ABORT (abort process)
239 EOR (end of record)
240 SE (subpotion end)
241 NOP (no operation)
242 DM (data mark)
243 BRK (break)
248 EL (eras
Comentarios de: Servicio de terminal remoto (0)
No hay comentarios