,,,,,,,,有时候我们需要在多台Linux服务器上面执行同样的命令,或者同样的操作,如果我们每一台单独登录上去做这样太麻烦了,所以我们可以考虑使用自动化脚本来实现。我这里使用Python多线程的方式,这样速度更快,如果使用壳只能一台完了执行另外一台效率不高。
,,,,,,,,针对这样的需要写了一个Python脚本来完成这样的工作,大致实现了我需要的效果
实现代码:
# !/usr/bin/Python # * - *编码:utf8 * - * ”“” 此脚本适用于批量登录到Linux操作系统,并执行一些简单命令 要求所有服务器的用户名密码一样,或者密钥一样,都能使用同一种方法登录 执行的命令默认只输入第一行,如果要输出多行需要修改ssh_login函数 默认脚本是以用户名密码登录,也可以改为用密钥登录 选项特殊说明: c:后面跟要执行命令,命令如w,正常运行时间、主机名、日期等,如果命令中有空格,需要用双引号,如“cat /etc/主机” ——:后面跟主机,有三种写法192.168.1.31指单台主机,192.168.1.31,192.168.132,指定多台主机,把逗号换成”——“指定区间 如果有很多主机,但用户名密码不一样,登录方法也不一样,可以考虑把这些信息写入到一个文件, 通过对文件遍历来完成复杂环境的需求 ”“” import paramiko 得到optparse import  OptionParser import 系统 import netaddr import 线程 #使用选项帮助信息可以使用中文 重载(系统) sys.setdefaultencoding (“utf - 8”) #定义选项 时间=usage sys.argv[0], +,”,[选项)” 时间=parser OptionParser(使用) parser.add_option (“c”,“——指令”, ,,,,,,,,,,,,,,,,,dest=爸噶睢? ,,,,,,,,,,,,,,,,,action=吧痰辍? ,,,,,,,,,,,,,,,,,默认=False, ,,,,,,,,,,,,,,,,,帮助='你要执行的命令,如:正常运行时间”) parser.add_option(' - ',,,主机, ,,,,,,,,,,,,,,,,,dest=爸骰? ,,,,,,,,,,,,,,,,,action=吧痰辍? ,,,,,,,,,,,,,,,,,默认=False, ,,,,,,,,,,,,,,,,,帮助=的需要执行命令的主机,跟主机IP地址,多个IP用逗号分隔,也可以用”——“连接一个主机范围”) 选择,,args =, parser.parse_args () def ssh_login (ip,指令): ,,,”登录并执行命令,可以更改为使用密钥登录” ,,,ssh =, paramiko.SSHClient () ,,,ssh.set_missing_host_key_policy (paramiko.AutoAddPolicy ()) ,,,ssh.connect(主机名=ip,端口=22日,用户名=?,密码=皃-0p-0p-0”) ,,,stdin,, stdout,, stderr =, ssh.exec_command(指令) ,,,print(%年代\ t % s, % (ip, stdout.readline () .rstrip ())) ,,,ssh.close () if __name__ ==,“__main__”: ,,,if not options.commond: ,,,,,,,印刷(“请指定要执行的命令”) ,,,,,,,退出(1) ,,,if not options.host: ,,,,,,,印刷(“请指定主机”) ,,,,,,,退出(1) ,,,if ', ',拷贝options.host: ,,,,,,,ip =, options.host.split (" ") ,,,,,,,for 小姐:ip:拷贝 ,,,,,,,,,,,t =, threading.Thread(目标=ssh_login, arg游戏=(我,options.commond)),,, #使用线程方式执行,更快 ,,,,,,,,,,,t.start () ,,,elif “-”,拷贝options.host: ,,,,,,,startip =, options.host.split (“-”) [0] ,,,,,,,endip =, options.host.split (“-”) [1] ,,,,,,,ip =,列表(netaddr.IPRange (startip, endip)),,,,,,,, # netaddr.IPRange()用于计算IP地址区间内的所有IP ,,,,,,,for 小姐:ip:拷贝 ,,,,,,,,,,,t =, threading.Thread(目标=ssh_login, arg游戏=(str(我),options.commond)) ,,,,,,,,,,,t.start () ,,,: ,,,,,,,ip =options.host ,,,,,,,ssh_login (ip, options.commond)
执行方式及结果如下:
。