Thank you GotToBTru,
I am missing the mark I have my script like this now but I still don't see a header in my log file just other information that was a result of the script in debug. For example:
^[[01m[root@remotehost ~ ]^[[m # hostname
remotehost
^[[01m[root@remotehost ~ ]^[[m # uptime
1:03pm up 9 day(s), 13:47, 3 users, load average: 5.83, 5.33, 5.1
+3
^[[01m[root@remotehost ~ ]^[[m # passwd amagana
New Password:
Re-enter new Password:
passwd: password successfully changed for amagana
^[[01m[root@remotehost ~ ]^[[m # exit
logout
$
My script is current like this now:
#!/usr/bin/perl -w
use warnings;
use strict;
use Expect;
#my $system = shift;
my $filename = "/var/tmp/expect_script.log";
my $header = "\n\n======= system =======\n";
my $timeout = 60;
my @servers = qw(
remotehost
);
for my $server (@servers) {
# do your thing with $server
change_password($server);
}
sub change_password {
my $system = shift;
$header =~ s/system/$system/;
#my $filename = "/var/tmp/expect_script.log";
my $ssh = Expect->new('ssh amagana@' . $system);
$ssh->log_file($filename);
$ssh->debug(1);
$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("newpassword\n");
$ssh->expect(60, 'Re-enter new Password:');
$ssh->send("newpassword\n");
$ssh->expect(60, '#');
$ssh->send("exit\n");
$ssh->expect(60, '$');
$ssh->send("exit\n");
$ssh->close();
}
|