Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^19: expect.pm header

by sn1987a (Chaplain)
on Apr 09, 2015 at 03:25 UTC ( #1122877=note: print w/replies, xml ) Need Help??


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

Yes, it goes in the subroutine where the other lines involving the header. This should have everything in the right place.

#!/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( remotehost ); 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->print_log_file($my_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(); }

Replies are listed 'Best First'.
Re^20: expect.pm header
by amagana (Acolyte) on Apr 10, 2015 at 15:07 UTC

    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(); }

      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?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1122877]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2019-04-24 04:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I am most likely to install a new module from CPAN if:
















    Results (121 votes). Check out past polls.

    Notices?