0
我在Perl中沒有超級技能。但是,我這樣做了兩個用戶更改LDAP密碼的腳本。使用Expect模塊更改ldap密碼
第一個腳本:
#!/usr/bin/perl -w
use strict;
use Expect;
my $user= getpwuid($<);
print "Enter your old password :" ;
my $oldpassword = <STDIN>;
chomp($oldpassword);
print "Enter you new password :";
my $newpassword = <STDIN>;
chomp($newpassword);
print "Running ' passwd ${user}'\n";
my $exp = Expect->spawn("passwd") or die "Can t acces to passwd \n";
unless ($exp->expect(1, "Enter login\(LDAP\) password:")) {} ;
print $exp "${oldpassword}\r" ;
unless ($exp->expect(1, "New password:")) {} ;
print $exp "${newpassword}\r" ;
unless ($exp->expect(1, "Re-enter new password:")) {} ;
print $exp "${newpassword}\r" ;
$exp->soft_close();
第二個腳本:
#!/usr/bin/perl -w
use strict;
use Expect;
my $user= getpwuid($<);
print "Enter your old password :" ;
my $oldpassword = <STDIN>;
chomp($oldpassword);
print "Enter your new password :";
my $newpassword = <STDIN>;
chomp($newpassword);
print "Running ' passwd ${user}'\n";
my $spawn_ok;
my $exp = Expect->spawn("passwd") or die "Can t acces to passwd \n";
$exp->expect(1,
[qr 'Enter login\(LDAP\) password:' ,
sub {
$spawn_ok = 1;
my $fh = shift;
$fh->send("${oldpassword}\n");
print "sent '${oldpassword}'\n";
exp_continue;
}
],
[eof =>
sub {
if ($spawn_ok) {
die "ERROR: premature EOF in login.\n";
} else {
die "ERROR: could not spawn old password.\n";
}
}
],
['New password: ' ,
sub {
my $fh =shift ;
$fh->send("${newpassword}\n");
print "sent '${newpassword}'\n";
exp_continue;
}
],
['Re-enter new password:' ,
sub {
my $fh =shift ;
$fh->send("${newpassword}\n");
print "sent '${newpassword}'\n";
exp_continue;
}
]
);
我不知道什麼是他們之間的更好。但他們工作。
其實我的腳本工作相同,如果舊密碼錯誤。我希望在腳本繼續之前控制舊密碼,或者如果舊密碼錯誤,腳本可能會重新啓動。我想過一個循環,我試圖說的是沒有成功的展臺腳本。 我能幫上忙嗎?
謝謝,但我的LDAP是OpenDS ...我想對密碼應用一些限制。這個事實推到了passwd命令..... – dubis 2013-03-13 13:30:36