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,如需转载请自行联系原作者

目录
相关文章
|
11天前
|
消息中间件 安全 Unix
SSH配置多台服务器之间的免密登陆以及登陆别名
SSH配置多台服务器之间的免密登陆以及登陆别名
21 1
|
1月前
|
缓存 网络协议 数据可视化
WinSCP下载安装并实现远程SSH本地服务器上传文件
WinSCP下载安装并实现远程SSH本地服务器上传文件
|
4天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
1月前
|
网络协议 Ubuntu Linux
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
123 0
|
2月前
|
网络安全 数据安全/隐私保护
如何使用ssh key免密码登录服务器?
如何使用ssh key免密码登录服务器?
|
29天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 弹性计算 数据可视化
要将ECS中的文件直接传输到阿里云网盘与相册(
【2月更文挑战第31天】要将ECS中的文件直接传输到阿里云网盘与相册(
416 4
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
18天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。
|
1月前
|
弹性计算
阿里云3M带宽云服务器并发多大?阿里云3M带宽云服务器测评参考
在探讨云服务器3M带宽能支持多大并发这一问题时,我们首先要明白一个关键点:并发量并非仅由带宽决定,还与网站本身的大小密切相关。一般来说,一个优化良好的普通网站页面大小可能只有几K,为便于计算,我们可以暂且假定每个页面大小为50K。
818 1