Chinaunix

标题: perl批量更改密码 [打印本页]

作者: trt2008    时间: 2010-03-15 10:23
标题: perl批量更改密码
请大家多指正

#!/usr/bin/perl

use strict;
use warnings;
use Net::SSH::Expect;  
use String::MkPasswd qw(mkpasswd);


my $user = "user";
my $pass = 123456;
my $root_pass = 123456;
my $new_user_pass = mkpasswd(-length => 15, -minnum => 3, -minlower => 3 , -minupper => 3, -minspecial => 3);
my $port = 22;



open (FILE, "</var/bak/test/iplist") or die "can't open file: $!\n";
while (<FILE>) {
    print;
    &ssh_host( "$_", "$port", "$user", "$pass" );
}
close(FILE);


sub ssh_host() {
    my ( $host, $port, $user, $pass ) = @_;
    my $ssh = Net::SSH::Expect->new(
        host        => $host,
        port        => $port,
        password    => $pass,
        user        => $user,
        no_terminal => 0,
        raw_pty     => 1,
        timeout     => 5,
    );

    open (FH, ">> /var/bak/test/log_$host") or die "can't open file: $!\n";

    print FH "-" x 80, "\n";
    my $start_time = localtime;
    print FH "start \tat $start_time\n";

    $ssh->debug(0);
    $ssh->run_ssh() or die "SSH process couldn't start: $!\n";

    $ssh->waitfor( '\(yes\/no\)\?$', 5 );
    $ssh->send("yes\n");
    $ssh->waitfor( 'password:\s*$/', 5 );
    $ssh->send("$pass");

    $ssh->send("su - root");
    $ssh->waitfor( 'Password:\s*$', 5 );
    $ssh->send("$root_pass");
    $ssh->waitfor( '#\s*', 5 );

    print FH "root login ok. \n";

    $ssh->send("passwd");

    $ssh->waitfor( 'password:\s*$', 5 );
    $ssh->send("$new_user_pass");

    $ssh->waitfor( 'password:\s*$', 5 );
    $ssh->send("$new_user_pass");
    $ssh->waitfor( '#\s*', 5 );

    my $ls = $ssh->exec("id");
    print FH "$ls\n";
    print FH "chang password ok!!!!!!!\n";
    print FH "$new_user_pass\n";

    my $end_time = localtime;
    print FH "end \tat $end_time\n";

    $ssh->close();

    close FH;

    print "-" x 80, "\n";
}
作者: 兰花仙子    时间: 2010-03-15 10:32
nice, 值得参考。
作者: trt2008    时间: 2010-03-15 10:39
我是新手,还请仙子JJ给优化一下,Expect模块好像不能并发,只能一台一台的更改,如果有1000台SERVER的话速度还是比较慢.
作者: 风吹不倒    时间: 2010-03-15 10:52
同求并发方法!
作者: dahe_1984    时间: 2010-03-15 11:47
我是新手,还请仙子JJ给优化一下,Expect模块好像不能并发,只能一台一台的更改,如果有1000台SERVER的话速度还 ...
trt2008 发表于 2010-03-15 10:39



    应该叫仙子MM
作者: churchmice    时间: 2010-03-15 11:47
多线程自己处理一下
作者: 兰花仙子    时间: 2010-03-15 11:51
我是新手,还请仙子JJ给优化一下,Expect模块好像不能并发,只能一台一台的更改,如果有1000台SERVER的话速度还 ...
trt2008 发表于 2010-03-15 10:39


不是Expect不能并发,是你自己没有设计成并发模型。
作者: trt2008    时间: 2010-03-15 11:56
好的,我再看看,多谢仙子MM
作者: evil_knight    时间: 2010-03-17 13:08
Net::SSH::Expect  模块慢的要死!
作者: hwxo    时间: 2010-03-18 18:40
同意楼上
作者: OpenBSD5    时间: 2010-03-22 14:29
回复 1# trt2008


    好帖,收藏了,向楼主!学习一下
作者: trt2008    时间: 2010-03-22 18:42
共同学习
作者: lovetjl    时间: 2010-03-23 22:18
要root 密码!有没有不用root 的程序和方法。
作者: jascar    时间: 2010-04-08 22:29
谢谢了! 赞一个!
作者: beyondfly    时间: 2010-04-12 10:44
仙子JJ,哈哈
作者: liyangole    时间: 2010-04-26 08:54
学习 中
作者: shhgs    时间: 2010-04-28 05:11
  1. for i in $(<hostlist); do
  2.     ssh $i "sudo chpasswd -e <<<'root:encrypted_passwd'"
  3. done
复制代码

作者: tom0732    时间: 2010-05-03 13:45
shhgs 发表于 2010-04-28 05:11



    这个还得手动输入密码吧
作者: shhgs    时间: 2010-05-11 05:14
这个还得手动输入密码吧
tom0732 发表于 2010-05-03 13:45



    有一个命令叫man

man chkpasswd
作者: longbow0    时间: 2010-05-28 09:45
Net::OpenSSH 是不是会快一些?
作者: wjlcn    时间: 2010-06-10 16:23
学习了
作者: buzzle    时间: 2010-06-19 09:46
直接在shell脚本passwd修改多简单.
作者: laputa73    时间: 2010-06-25 14:37
可以直接用expect模块。
你这样每次登陆都有可能wait 5s.很慢
应该yes/no/password一起等
可以并发。
比如一次起5个session
作者: laputa73    时间: 2010-06-25 14:42
本帖最后由 laputa73 于 2010-06-25 14:47 编辑
直接在shell脚本passwd修改多简单.
buzzle 发表于 2010-06-19 09:46



非root用户shell可以改密码么?
passwd命令好像是不允许用sh输入密码的?
还有ssh登录,sh怎么实现?
(chpasswd命令只允许root用的)
要实现普通用户登录并修改密码还是要用expect的。

expect模块的好处是可以模拟终端交互,可以直接用系统的ssh命令。不用单独安装其他的ssh相关模块。
作者: buzzle    时间: 2010-06-25 15:30
回复 24# laputa73


   我以前用passwd命令在shell脚本中修改root密码,非root没试过.


ssh  后跟用户名@IP “cmd”就可以执行命令啊.
作者: laputa73    时间: 2010-06-25 15:54
普通用户貌似不能直接用单行命令改。
下面这样是不行的
$ echo 12345 | passwd user
输入现有的登录口令:
$
作者: soopo    时间: 2010-06-26 11:31
多谢分享.收藏
作者: obsd178    时间: 2010-08-08 19:04
这个帖子真的不错,我要抓下来试试看!
作者: szedwin    时间: 2010-08-10 12:43
我也分享一个用perl写的修改密码的程序:

http://www.ywjs.net/read.php?tid-1040.html

经过验证这个已经成功修改密码, 不足之处在于多并发未实现.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2