perl自动化批量执行脚本

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

#!/usr/bin/perl
#use strict;
use feature 'say';
use Net::SSH::Perl;
use Net::SCP::Expect;
use Net::OpenSSH;
use Term::ReadKey;

alarm 60;

####服务器列表
my @server_list = (
	{ 'username'=>'root','host'=>'192.168.1.108'},
    { 'username'=>'root','host'=>'192.168.1.109'},
);

#拷贝脚本至多台服务器,并执行该脚本,用了Net::SCP::Expect模块
sub autocopy {
	my($cmd) = @_;
	foreach my $element (@Ad) {
			my $host = $$element{'host'};
			my $username = $$element{'username'};
			my $password = $$element{'passwd'};
			
			my $ssh = Net::SSH::Perl->new($host);
			$ssh->login($username,$password);
			my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
			
			if(!$exit) {
				my $scp = Net::SCP::Expect->new('auto_yes'=>1);##一般第一次连接服务器的时候会出现"Are you sure you want to continue connecting (yes/no)?",这个'auto_yes'=>1 就是默认帮我们输入了yes
				$scp->login($username,$password);
				eval {
					$scp->scp('/root/bin/pubkey.sh',"$host:/root/bin/");
				};
				if($@) {
					print $host."\n";
					print $@;
				}
			} else {
				print $host.' cmd error';
				exit;
			}
			
	}
}

####根据用户名密码登入操作
sub autoexec {
	my($cmd) = @_;
	foreach my $element (@Ad) {
			my $host = $$element{'host'};
			my $username = $$element{'username'};
			my $password = $$element{'passwd'};
			
			my $ssh = Net::SSH::Perl->new($host);
			$ssh->login($username,$password);
			my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
			
			if($exit) {
				say $host;
			}

	}
}

####通过加密过的密钥登入操作
sub auto_to_identity {
	my($cmd) = @_;
	ReadMode('noecho'); ###隐藏输入的密钥密码
	print "Enter passphrase for keyfile '/root/.ssh/id_rsa':";
	my $passphrase = ReadLine(0);
	chomp($passphrase);
	ReadMode('restore');
	say '';
	
	foreach my $element (@server_list) {
		my $host = $$element{'host'};
		my $username = $$element{'username'};
		my $key = '/root/.ssh/id_rsa';
		
		my %param = (
			user => $username,
			passphrase => $passphrase,
			key_path => $key,
			timeout => 10
		);
		my $ssh = Net::OpenSSH->new($host,%param);
		my ($stdout,$stderr) = $ssh->capture2($cmd);
		
		if($stdout){
			say $stdout;
		} else {
			say $ssh->error;
			say $stderr;
		}
	}
	
}
my $cmd = 'mkdir /root/dd';
auto_to_identity($cmd);