批量执行linux命令
1、批量执行linux命令
范例-shell版-linux批量执行命令(基于免密环境的)-2024.5.22
说明
这个脚本执行的前提是:
脚本放置机器已经做好了对目标机器的免密配置;
另外,这个脚本是经过实际工作验证成功的;
脚本内容
ip
192.168.1.1192.168.1.2
ntp.sh
#!/bin/bash# 打开文件file="ip"# 使用while循环逐行读取文件内容whileIFS=read-rlinedoecho"$line"done<"$file"
命令内容:
fori in`bash ntp.sh`;doecho$i ;date;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;date-s"2024-05-21 01:45:00";echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;hwclock-w;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;hwclock;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;servicecas_monrestart;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;ntpq-p;echo-e"\n";done
执行方法
将ip、ntp.sh放到做了免密的那台服务器上
执行如下命令:
fori in`bash ntp.sh`;doecho$i ;date;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;date-s"2024-05-21 01:45:00";echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;hwclock-w;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;hwclock;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;servicecas_monrestart;echo-e"\n";donefori in`bash ntp.sh`;doecho$i ;ntpq-p;echo-e"\n";done
脚本位置
linuxshell.py
importparamikoimportsysdefssh_exec_cmd(hostname,port,username,password,command):# 创建SSH客户端ssh =paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(hostname=hostname,port=port,username=username,password=password)# 执行命令stdin,stdout,stderr =ssh.exec_command(command)# 获取命令结果cmd_result =stdout.read()# 关闭连接ssh.close()# 返回结果returncmd_result.decode()#注意:# 命令列表(截取掉第一个元素)cmd_args =sys.argv[1:]# 把列表里的元素用空格连接,组成命令cmd =''.join(cmd_args)# for循环遍历列表forserver inopen(r'ip.txt'):ip=server.split("/")[1]# value=server.split("/")[2]# print(ip)# print(value)# 执行命令result =ssh_exec_cmd(hostname=ip,port=22,username='root',password='123456',command="hostname")# result =ssh_exec_cmd(hostname=ip,port=22,username='root',password='password',command='sh test.sh') #执行脚本也是没问题的# 输出结果print(ip,"is ok !!!")# print(result)
v3-myssh_v2脚本-20210104(更新后)
1、首先,请确认python环境是否已安装相关模块
(如无安装,请利用pip install 模块名安装,前提是要能联网;或者利用离线方式安装相应模块)
2、如何使用此脚本?
(1)填写目标ip、账户名、密码、ssh端口:
(2)填写需要在linux机器上需要被执行的命令
特别注意:目前此版本需要保证节点ip都是可通的才行。(否则程序会卡主不往下执行的)
观察输出
范例1:测试执行单个命令:可以执行成功。
单个命令可以用;隔开;
范例2:测试linux上的某个脚本:可以执行成功。
3、次脚本需要进行优化的地方
==(1)最大问题:如果某个服务器ip不通的话,程序运行就会卡住。==
如何做到,遇到ip不通的或者执行失败的机器输出到对应的文件,执行成功的报success提示:(这种才是相对的智能化)
测试3台机器如下:
3个ip都通时,测试效果如下:
使其中一个ip不通时,再次进行测试:
测试现象,当其中一个节点不通时,后续节点没有出现在控制台上,这个就是个bug了。理论是要经过一段时间跳过去的才对。。。
(2)cmd输出的命令速度很慢。
(3)缺点:命令中不能使用变量
v2-linuxCmd脚本(别人分享-有bug)
无备注
v1-myssh-Python脚本(网上脚本)
1、首先,请确认python环境是否已安装相关模块
(如无安装,请利用pip install 模块名安装,前提是要能联网;或者利用离线方式安装相应模块)
2、如何使用此脚本?
1 填写目标ip、账户名、密码、ssh端口:
2 填写需要在linux机器上需要被执行的命令
3 观察输出
需要修改的2处地方修改完后,直接运行程序,验证结果。
4 案例:测试执行单个命令:可以执行成功。
#单个命令可以用;隔开;
5 案例:测试linux上的某个脚本:可以执行成功。
#Linux上的脚本:
#
3、次脚本的缺点
6 最大问题:如果某个服务器ip不通的话,程序运行就会卡主。
7 cmd输出的命令速度很慢:。。。。。。
8 缺点:命令中不能使用变量;
9 cmd在输出时没有关于所属主机的提示:
1