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中。同样可以批量处理
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |