jueves, 8 de octubre de 2009

Acceso remoto automatizado por telnet

Aunque el método común de logarse en una máquina de manera remota (y en modo texto) es ssh, en alguna ocasión puede que nos toque administrar sistemas antiguos que usan telnet para las labores de administración remota.

En este caso, permitir que un script se pueda logar por telnet en una máquina remota y ejecutar algunos comandos puede resultar tarea dificil (telnet no permite especificar por linea de comandos usuario y contraseña). A simple vista nos parecería que el logado por telnet requiere hacerse por una persona. No obstante, este proceso se puede automatizar (y por tanto, usarlo en nuestros scripts).

La idea es la siguiente: "teclear" los comandos o textos necesarios cuando las aplicaciones nos las van pidiendo. Cuando ejecutamos el comando telnet $IP_SERVIDOR, en un segundo o menos nos aparece el típico "Login: "; en este momento nuestro script tecleará el login correspondiente. Tras dos segundos (o algo menos) se nos pide "Password: "; a lo que nuestro script responderá. Y así con el resto de comandos o textos que una persona que se logase fuese introduciendo (con las temporizaciones correctas).

Os pongo un ejemplo:

#!/bin/sh

SERVIDOR=192.168.1.100
USUARIO=admin
PASSWORD=istrador
(sleep 1;echo $USUARIO; sleep 2; echo $PASSWORD; sleep 3; echo "xterm"; sleep 3;echo "bdf"; sleep 2; echo "exit" ) | telnet $SERVIDOR >salida 2> /dev/null

Si omitimos la redirección de la salida estándar a fichero, podremos ver cómo se va ejecutando todo y se van escribiendo los comandos en los tiempos establecidos. Si no dejásemos una pausa de 2 segundos entre la introducción del login y del password, el password se escribiría en pantalla antes de que el demonio telnet imprima el texto "Password: ", y muchos demonios telnet (si no todos) olvidan lo tecleado antes de solicitar el password. Lo mismo para el resto de comandos; necesitamos esperar a que "bdf" (df de HP-UX) termine de ejecutarse y nos aparezca el prompth del shell para poder meter el siguiente comando: exit.

4 comentarios:

  1. Buenas!

    Pegale una mirada a los comandos 'expect' y 'autoexpect' que te permite armar este tipo de scripts, de una forma mucho mas simple!

    Saludos,

    ResponderEliminar
  2. Hola, muchas gracias por el comentario. Es un comando muy interesante y que permite realizar el mismo trabajo en menos tiempo.

    Un saludo!

    ResponderEliminar
  3. oie pana esto funciona en un archivo .BAT?? por que lo e buscado como loco y nomas no doy con esa solucion... T_T

    ResponderEliminar
  4. Hola, siento decirte que en el CMD de Windows esta sintaxis no creo que te funcione. Es propia de Bash. Te propongo que investigues en PowerShell de Windows (ventana de comandos "avanzada") a ver si dispone de algo parecido, y si no siempre puedes instalarte cygwin para Windows; de esta forma quizá te funcione.

    Un saludo.

    ResponderEliminar