Term::ReadKey para 
evitar el eco del password en pantalla.
Es posible lograr el mismo efecto usando las funcionalidades
proveídas por Expect.
Sigue la porción de código que cambia:
lhp@nereida:~/Lperl/src/expect/tutorial$ cat -n etsii2
 1  #!/usr/bin/perl -w
 2  use strict;
 3  use Expect;
 4
 5  # $Expect::Debug=2;
 6   $Expect::Exp_Internal=1;
 7
 8  my $RSH='/usr/bin/ssh';
 9  my $host_to_login_to='username@remote_machine';
10  my $machine='tomillo';
11
12  # Get the password.
13  print "Enter password: ";
14  my $stdin=Expect->exp_init(\*STDIN);
15  $stdin->exp_stty('-echo'); # Now turn off echoing
16  my ($match_num,$error,$match,$before,$after)=$stdin->expect(undef,"\n");
17  my $password = $before;
18  $stdin->exp_stty('echo'); # Turn echo back on
19  print "\n"; # print that newline that wasn't echoed
20
21  my $rsh=Expect->spawn($RSH,$host_to_login_to);
22
23  # Look for a password prompt in the bastion
24  $rsh->expect(30,'-re','word:\s$')||(die"Never got password prompt\n");
25  print $rsh "$password\r";
..  ..... ....  ............. # Same as in the former example
43  $rsh->interact();
La llamada de la línea 14 retorna una referencia
al objeto Expect creado. El constructor tiene dos formas de llamada:
Expect->exp_init(\*FILEHANDLE) Expect->init(\*FILEHANDLE)Una vez creado es posible llamar al método exp_stty el cuál tiene la sintáxis:
$object->stty(qw(mode1 mode2...))que establece los modos de la terminal virtual creada. En este caso desactivamos el eco a pantalla de los caracteres de entrada. A continuación llamamos a expect en un contexto de lista.
my ($match_num,$error,$match,$before,$after)=$stdin->expect(undef,"\n");
El significado de los elementos retornados es como sigue:
$match_num contiene el mismo valor que se
retorna en un contexto escalar: la posición del patrón que ha casado
dentro de la lista de patrones que se hayan pasado
o bien undef si no hubo matching. En todos los ejemplos
que hemos puesto sólo se ha escrito un  patrón,
pero expect admite  que se le pasen
varios.
$error contiene un número seguido 
de una cadena que nos comunica la naturaleza del error.
Por ejemplo: 1:TIMEOUT.
$match, $before y $after
contienen las cadenas que han casado, la cadena que precede
a esta y la que va después de aquella. 
expect
en la línea 16 sea undef estamos haciendo que espere
tiempo ilimitado8.1 hasta que se encuentre el patrón \n.
Casiano Rodríguez León
