加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl远程执行多台服务器shell命令

发布时间:2020-12-15 21:05:47 所属栏目:大数据 来源:网络整理
导读:? 在生成环境中通常运维需要执行非常多的重复命令,一台可能还好 多台就杯具了。尤其有时候要批量去更新多台服务器的文件,或者是删除。 ?? 一个好运维都是懒惰的,所以自己写了个perl脚本可以远程去执行shell命令,很灵活。2个配置文件,一个管理服务器信息
? 在生成环境中通常运维需要执行非常多的重复命令,一台可能还好 多台就杯具了。尤其有时候要批量去更新多台服务器的文件,或者是删除。
?? 一个好运维都是懒惰的,所以自己写了个perl脚本可以远程去执行shell命令,很灵活。2个配置文件,一个管理服务器信息,一个放所需要执行的命令。
code:
#!/usr/bin/perl
use strict;
use Net::SSH::Expect;
my @ssh_list;
my $ssh_txt='ip_list.txt';
my $command_txt='command_txt.txt';
open FH,$ssh_txt;
????????while(<FH>){
????????@ssh_list=split;
????????print "正在登陆".$ssh_list[0]."...n";
????????&ssh_conn("$ssh_list[0]","$ssh_list[1]","$ssh_list[2]","$ssh_list[3]");
????????}
????????close????FH;

sub????ssh_conn(){
????????????????my($host,$port,$user,$pass) = @_;
????????????????my $ssh = Net::SSH::Expect->new(
????????????????????????????????host????????=>????????????$host,
????????????????????????????????port????????=>????????????$port,
????????????????????????????????user????????=>????????????$user,
????????????????????????????????password????????????????=>$pass,
????????????????????????????????no_terminal???????? =>0,
????????????????????????????????raw_pty =>1,
????????????????????????????????timeout =>????????????3,
????????????????????????????????);
????????????????????????????????????????????????$ssh->debug(0);
????????????????????????????????????????????????$ssh->run_ssh() or die "SSH process coundn't start:$!";
????????????????????????????????????????????????$ssh->waitfor( '(yes/no)?$',1 ); #交互式修改密码,给予2秒的时间
????????????????????????????????????????????????$ssh->send("yesn");
????????????????????????????????????????????????$ssh->waitfor( 'password:s*$/',1);
????????????????????????????????????????????????$ssh->send("$ssh_list[3]");
????????????????????????????????????????????????$ssh->send("su - root");
????????????????????????????????????????????????$ssh->waitfor( 'password:s*$/',1);
????????????????????????????????????????????????$ssh->send("$ssh_list[4]");
????????????????????????????????????????????????#$ssh->waitfor("#s*",2);
????????????????????????????????????????????????open F1,$command_txt;
????????????????????????????????????????????????while(<F1>){


????????????????????????????????????????????????my @command=split/n/,$_;
????????????????????????????????????????????????print "$command[0]-->????";
????????????????????????????????????????????????$ssh->exec("$command[0]");

????????????????????????????????????????????????print "$ssh_list[0]命令执行完毕n";


????????????????????????????????????????????????}
????????????????????????????????????????????????close F1;
????????????????????????????????????????????????$ssh->close();
下面是2个文件内容。
[root@nagios script]# cat ip_list.txt
192.168.2.101????22????mcshell???? psswd????server1
192.168.2.102????22????mcshell???? psswd????server2
192.168.2.103????22????mcshell???? psswd????server3
[root@nagios script]# cat command_txt.txt
touch /home/mcshell/file1
touch /home/mcshell/file2
?
执行结果:

当然我这里为了测试方便,用了写的比较简单,大家也可以发挥想象,直接把复杂的shell或者perl密令直接放在command_txt.txt中。同样可以批量处理

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读