开发者社区> 余二五> 正文

perl 利用Net::SSH::Expect模块批量修改服务器密码

简介:
+关注继续查看
如果以下脚本可以批量修改服务器的密码,并且导出随机生成的密码
首先需要安装Net::SSH::Expect
安装方法:
#cpan
cpan>install Net::SSH::Expect
然后一路回车
#!/usr/bin/perl

use strict;
use warnings;
use Net::SSH::Expect;

my @ssh_list;
my @array_list=(0..9,'a'..'z');# 生成随机种子
my $new_user_pass;
while (<>) {

$new_user_pass=join '', map{$array_list[int rand @array_list]}0..7;#生成随机密码 0..7表示8位密码
                @ssh_list=split/\s+/,$_;
        print $ssh_list[0]."正在修改密码\n";
        &ssh_test( "$ssh_list[0]", "$ssh_list[1]", "$ssh_list[2]", "$ssh_list[3]" );
}

sub ssh_test() {
        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         => 6,
        );

        open FI, ">>    /home/mcshell/newuser.txt" or die $!;##新密码所放的位置
        print FI "-" x 80, "\n";

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

        $ssh->waitfor( '\(yes\/no\)\?$', 2 ); #交互式修改密码,给予2秒的时间
        $ssh->send("yes\n");
        $ssh->waitfor( 'password:\s*$/', 2);
        $ssh->send("$ssh_list[3]");

        $ssh->send("su - root");                                 #    其实这里我本来的用户不是root,为了更好的扩展
        $ssh->waitfor( 'Password:\s*$', 2 );#    经常服务器不容许root直接登录的,所以要用其他
        $ssh->send("$ssh_list[3]"); #用户来切换root
        $ssh->waitfor( '#\s*', 2 );


        $ssh->send("passwd $ssh_list[2]");

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

        $ssh->waitfor( 'password:\s*$', 2 );
        $ssh->send("$new_user_pass");
        $ssh->waitfor( '#\s*', 2 );
        print FI "$host\t$port\t$user\t$new_user_pass\n";
        $ssh->close();

        close FI;
        print "修改完成\n";
        print "-" x 30, "\n";
}
使用方法:
[root@mysqlmaster ~]# cat oldpasswd.txt
192.168.1.91        22            root        fmnuy5ci
192.168.1.95        22            root        bortv8bb


[root@mysqlmaster ~]# ./sshpwd.pl oldpasswd.txt
192.168.1.91正在修改密码
修改完成
------------------------------
192.168.1.95正在修改密码
修改完成
------------------------------
查看新生成的密码文件
[root@mysqlmaster ~]# cat /home/mcshell/newuser.txt
--------------------------------------------------------------------------------
192.168.1.91        22            root        9f8mu1gs
--------------------------------------------------------------------------------
192.168.1.95        22            root        1p2p2y0y









本文转自 mcshell 51CTO博客,原文链接:http://blog.51cto.com/mcshell/929109,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
node使用http 模块搭建一个静态服务器
node使用http 模块搭建一个静态服务器
71 0
node.js 学习入门(07 - express 模块创建基本 web 服务器)(下)
node.js 学习入门(07 - express 模块创建基本 web 服务器)
74 0
node.js 学习入门(07 - express 模块创建基本 web 服务器)(上)
node.js 学习入门(07 - express 模块创建基本 web 服务器)
53 0
node.js 学习入门(04 - http 模块创建基本的web服务器)
node.js 学习入门(04 - http 模块创建基本的web服务器)
35 0
分布式服务器框架之Servers.Core中 实现Log模块设计 写入MongoDB数据库
游戏服务器中都需要用到Log模块,log模块存在的意义第一个是将log输出到控制台又或者是写入到log文件中,出了BUG方便定位;第二是常用于将用户的数据(例如玩家登录、道具购买量)将这种log统计到数据库中,方便统计用户留存信息、数据分析等。
39 0
Python编程:WSGI服务器的参考实现wsgiref模块
Python编程:WSGI服务器的参考实现wsgiref模块
61 0
Node.js之详解http模块与web服务器的创建
本文主要介绍Node.js中http模块与web服务器的创建过程。
83 0
nodeJS+express+mysql模块封装之服务器渲染小demo
nodeJS+express+mysql模块封装之服务器渲染小demo
120 0
在Ubuntu服务器上使用python3+selenium模块
在Ubuntu服务器上使用python3+selenium模块
316 0
Qt 数据服务器、协议转换、系统托盘模块、CAN总线模块、反射内存卡模块
这个程序也不怎么复杂,就则一个界面,核心功能呢就是提供反射内存卡和CAN采集卡数据交互,其他的没有了。
73 0
+关注
余二五
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
函数计算事件驱动的无服务器计算服务
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载