http://www.perlmonks.org?node_id=1123047


in reply to Re^19: expect.pm header
in thread expect.pm header

I apologize I had to tend to my son he was not feeling well so I was not in the office yesterday April 9th

so I am trying to run this script as suggested I do not see that my log has a header, I also added three remote hosts to run the script to see if I could get a header for each one but no header

#!/usr/bin/perl -w use warnings; use strict; use Expect; my $filename = "/var/tmp/expect_script.log"; my $header = "\r\n\r\n======= system =======\r\n"; my $timeout = 60; my @servers = qw( remotehost03 remotehost04 remotehost05 ); for my $server (@servers) { # do your thing with $server change_password($server); } sub change_password { my $system = shift; my $ssh = Expect->new('ssh amagana@' . $system); $ssh->debug(1); $ssh->log_file("$filename"); my $my_header = $header; $my_header =~ s/system/$system/; $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(); }

Replies are listed 'Best First'.
Re^21: expect.pm header
by sn1987a (Deacon) on Apr 10, 2015 at 15:39 UTC

    I am sorry to hear about your son. I hope he is feeling better today.

    You are just missing the call to print_log_file. Find the place in your code where you have:

    my $my_header = $header; $my_header =~ s/system/$system/; $ssh->expect ( $timeout,
    and add the line as shown below:
    my $my_header = $header; $my_header =~ s/system/$system/; $ssh->print_log_file($my_header); # This line needs to added here <<<< +<<< $ssh->expect ( $timeout,

      Thank you! I can see the header now I just need to practice more with how to format in perl I really want to do that well.

      This is what my header looks like in my log file and you can now see where the header is, I really thank you for your help I learn by seeing working examples and then analyze how it works.

      $ ^M ^M ======= remotehost03 =======^M ^M You are accessing a U.S. Government (USG) Information System (IS)

      Oh! I was wondering is it possible to get my script to die if the password is not the right one initially and just keep going to the next box? And it reports to me a list of servers that failed but the script still keeps going?