使用Python之paramiko模块和threading实现多线程登录多台Linux服务器
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,有时候我们需要在多台Linux服务器上面执行同样的命令,或者同样的操作,如果我们每一台单独登录上去做这样太麻烦了,所以我们可以考虑使用自动化脚本来实现。我这里使用Python多线程的方式,这样速度更快
千家信息网最后更新 2026年11月02日使用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安全错误
数据库的锁怎样保障安全
互联网科技名片
互联网 视角下的科技创新
上游互联网科技
互联网金融和金融科技
互联网科技股午盘股票涨跌
中国最先进互联网科技公司
上海电发互联网科技有限公司
深圳前海聚择互联网科技有限公司
新华互联网科技2019
互联网科技博主是什么意思
互联网科技项目计划书材料类
黑科技闪耀互联网之光
深圳育鹏互联网科技有限公司招聘
乌苏新华互联网科技做什么的
互联网公司黑科技创始人
长沙互联网科技
张家口科技产业互联网平台
银川新华互联网科技学校原画
科技和互联网行业的特点
广西泛欧互联网科技有限公司
科技平台互联网
互联网科技垄断
北京大学互联网科技怎么样
互联网科技寓意
互联网科技和信息
青海科技产业互联网发展
西安小鹰速贷互联网科技有限公司
广州百诚互联网科技有限公司官网
互联网对科技影响
互联网科技创新方面的资料