in reply to Re^14: expect.pm header
in thread expect.pm header
You are getting the error because there is no semicolon at the end of the line
my $my_header = $header
That line should be in the change_password subroutine with the other ones I gave you. That subroutine should be:
sub change_password { my $system = shift; my $ssh = Expect->new('ssh amagana@' . $system); $ssh->debug(1); $ssh->log_file("$filename"); my $my_header = $header; ###### This line added <<<< $my_header =~ s/system/$system/; $ssh->print_log_file($header); $ssh->expect ( $timeout, [ qr/Password:/], [ qr/Are you sure you want to continue connecting \(yes\/no\)?/] ); if ($ssh->match() =~ m/Are you sure you want to continue connecting \( +yes\/no\)? +/ ) { $ssh->send("yes\r"); } elsif ($ssh->match() =~ m/Password:/ ) { $ssh->send("mycurrentpassword\n"); } $ssh->expect(60, '$'); $ssh->send("su - root\n"); $ssh->expect(60, 'Password:'); $ssh->send("rootpassword\n"); $ssh->expect(60, '#'); $ssh->send("hostname\n"); $ssh->expect(60, '#'); $ssh->send("uptime\n"); $ssh->expect(60, '#'); $ssh->send("passwd amagana\n"); $ssh->expect(60, 'New Password:'); $ssh->send("mynewpassword\n"); $ssh->expect(60, 'Re-enter new Password:'); $ssh->send("mynewpassword\n"); $ssh->expect(60, '#'); $ssh->send("exit\n"); $ssh->expect(60, '$'); $ssh->send("exit\n"); $ssh->close(); }
The idea is to make a local copy of the header in the subroutine, then change "system" to the actual system name. This way the original header text is unchanged and will be available for subsequent calls.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^16: expect.pm header
by amagana (Acolyte) on Apr 08, 2015 at 21:12 UTC | |
by sn1987a (Curate) on Apr 08, 2015 at 21:20 UTC | |
by amagana (Acolyte) on Apr 08, 2015 at 21:42 UTC | |
by sn1987a (Curate) on Apr 09, 2015 at 03:25 UTC | |
by amagana (Acolyte) on Apr 10, 2015 at 15:07 UTC | |
|