使用Python之paramiko模块和threading实现多线程登录多台Linux服务器
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,有时候我们需要在多台Linux服务器上面执行同样的命令,或者同样的操作,如果我们每一台单独登录上去做这样太麻烦了,所以我们可以考虑使用自动化脚本来实现。我这里使用Python多线程的方式,这样速度更快
千家信息网最后更新 2025年12月04日使用Python之paramiko模块和threading实现多线程登录多台Linux服务器
有时候我们需要在多台Linux服务器上面执行同样的命令,或者同样的操作,如果我们每一台单独登录上去做这样太麻烦了,所以我们可以考虑使用自动化脚本来实现。我这里使用Python多线程的方式,这样速度更快,如果使用Shell只能一台完了执行另外一台效率不高。
针对这样的需要写了一个Python脚本来完成这样的工作,大致实现了我需要的效果
实现代码:
#!/usr/bin/python#*-*coding:utf8*-*"""此脚本适用于批量登录到Linux操作系统,并执行一些简单命令要求所有服务器的用户名密码一样,或者密钥一样,都能使用同一种方法登录执行的命令默认只输入第一行,如果要输出多行需要修改ssh_login函数默认脚本是以用户名密码登录,也可以改为用密钥登录选项特殊说明:-c:后面跟要执行命令,命令如w,uptime,hostname,date等,如果命令中有空格,需要用双引号,如"cat /etc/hosts"-a:后面跟主机,有三种写法192.168.1.31指单台主机,192.168.1.31,192.168.132,指定多台主机,把逗号换成"-"指定区间如果有很多主机,但用户名密码不一样,登录方法也不一样,可以考虑把这些信息写入到一个文件,通过对文件遍历来完成复杂环境的需求"""import paramikofrom optparse import OptionParserimport sysimport netaddrimport threading#使用选项帮助信息可以使用中文reload(sys)sys.setdefaultencoding("utf-8")#定义选项usage = sys.argv[0] + " [选项]"parser = OptionParser(usage)parser.add_option('-c', '--commond', dest='commond', action='store', default=False, help='你要执行的命令,如:uptime')parser.add_option('-a', '--host', dest='host', action='store', default=False, help='需要执行命令的主机,跟主机IP地址,多个IP用逗号分隔,也可以用"-"连接一个主机范围')options, args = parser.parse_args()def ssh_login(ip, commond): "登录并执行命令,可以更改为使用密钥登录" ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=ip, port=22, username='root', password='p-0p-0p-0') stdin, stdout, stderr = ssh.exec_command(commond) print('%s\t%s' %(ip, stdout.readline().rstrip())) ssh.close()if __name__ == '__main__': if not options.commond: print("请指定要执行的命令") exit(1) if not options.host: print("请指定主机") exit(1) if ',' in options.host: ip = options.host.split(',') for i in ip: t = threading.Thread(target=ssh_login, args=(i, options.commond)) #使用线程方式执行,更快 t.start() elif '-' in options.host: startip = options.host.split('-')[0] endip = options.host.split('-')[1] ip = list(netaddr.IPRange(startip, endip)) #netaddr.IPRange()用于计算IP地址区间内的所有IP for i in ip: t = threading.Thread(target=ssh_login, args=(str(i), options.commond)) t.start() else: ip = options.host ssh_login(ip, options.commond)执行方式及结果如下:

.
命令
登录
主机
脚本
密码
密钥
方式
用户
用户名
多台
服务器
线程
服务
信息
区间
地址
文件
方法
更快
逗号
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库中用于储存数据
r740服务器出厂编号
宜昌定制软件开发电话
宝山区管理软件开发代理价格
关于网络安全重要讲话
网络安全主题班会串词
亿家安互联网科技公司直播间
通渭县网络安全宣传
贵州师范学院网络技术
首届中国网络安全产业大会
怎么修改t3数据库
物流软件开发分析报告
广播网络技术
网络安全监控平台建设
知网里的经济数据库属于
网络安全法更新
杭州硬盘取数据库
网络安全个人信息保护法宣传视频
众信网和网络技术有限公司
enisa欧盟网络安全局
开展网络安全教育授课报告
戴尔网络安全密钥是啥
做好web服务器在安全措施
宁波软件开发外包公司有哪些
开普网络技术有限公司
数据库索引 数据结构
荣耀软件开发师工资待遇
辽宁服务器电源哪家便宜
大连秀原网络技术有限公司
软件开发好用的显示器