Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >批量执行Linux命令或者配置

批量执行Linux命令或者配置

原创
作者头像
用户1503405
修改于 2021-11-01 01:14:21
修改于 2021-11-01 01:14:21
3.3K00
代码可运行
举报
文章被收录于专栏:棒棒小飞人棒棒小飞人
运行总次数:0
代码可运行

在批量服务器密码统一的情况下使用: 参数介绍: -u   用户名 -p 密码 -P port -s  要执行的脚本 -c 要执行的命令 -f  要执行的服务器IP列表

指定-s的时候,直接执行脚本,跳过-c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/env python
import paramiko
import sys,os
import time
from optparse import OptionParser
parser = OptionParser(add_help_option=0)
parser.add_option("-f", "--file", action="store", type="string", dest="listfile",default="")
parser.add_option("-u", "--user", action="store", type="string", dest="username",default="root")
parser.add_option("-p", "--passwd", action="store", type="string", dest="password",default="mypass")
parser.add_option("-P", "--port", action="store", type="string", dest="port",default="22")
parser.add_option("-c", "--cmd", action="store", type="string", dest="cmdline",default="hostname")
parser.add_option("-s", "--script", action="store", type="string", dest="script",default="")
(options, args) = parser.parse_args()
listfile=options.listfile
username = options.username
passwd = options.password
port = options.port
rcmd = options.cmdline
scriptfile = options.script
time_now = time.strftime('%Y%m%d%H%M%S')
infofile="log/info.txt"
if os.path.isdir("log"):
    pass
else:
    os.mkdir("log")
if os.path.isfile(infofile):
        os.rename(infofile,infofile+time_now)
info = open(infofile,"a")
def execmd(host,port,username,passwd,rcmd):
    #info = open(infofile,"a")
    try:
        client = paramiko.SSHClient()
        #client.load_system_host_keys()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(host,port=int(port),username=username,password=passwd,timeout=1)
        #rcmd = "ifconfig eth0|grep HWaddr|awk '{print $NF}'"
        print rcmd
        stdin, stdout, stderr = client.exec_command(rcmd)
        #info.write(host+"\n"+"@"*20+"\n")
        for line in stdout:
            info.write("%s: %s"%(host,line))
        client.close()
    except:
        info.write("%s: SSH Login Faild\n\n"%(host))
    #info.close()
def transfile():
    try:
        trans = paramiko.Transport((host,int(port)))
        trans.connect(username=username,password=passwd)
        sftp = paramiko.SFTPClient.from_transport(trans)
        #sftp.get("","")
        sftp.put(scriptfile,"/tmp/%s"%scriptfile)
        trans.close()
    except:
        #print "File translation faild"
        info.write("%s: File translation faild\n"%(host))
if __name__=="__main__":
    for ipaddr in open(listfile).readlines():
        host = ipaddr.strip("\n").rstrip().lstrip()
        print host
        if scriptfile == "":
            pass
        else:
            transfile()
            rcmd="sh /tmp/%s"%scriptfile
        execmd(host,port,username,passwd,rcmd)
    info.close()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
死磕 java线程系列之线程池深入解析——未来任务执行流程
前面我们一起学习了线程池中普通任务的执行流程,但其实线程池中还有一种任务,叫作未来任务(future task),使用它您可以获取任务执行的结果,它是怎么实现的呢?
彤哥
2019/11/06
5920
死磕 java线程系列之线程池深入解析——未来任务执行流程
Callable/Future 使用及原理分析,Future .get()为啥能等待呢?
Callable/Future 和 Thread 之类的线程构建最大的区别在于,能够很方便的获取线程执行完以后的结果。首先来看一个简单的例子
源码之路
2020/09/04
5K0
Callable/Future 使用及原理分析,Future .get()为啥能等待呢?
JUC并发—14.Future模式和异步编程分析一
Future/Callable实现了一个异步执行并带有返回结果的功能。Future表示获取一个异步执行的结果,Callable表示一个异步执行的任务,Callable会产生一个结果并给到Future。
东阳马生架构
2025/05/07
1740
高并发之——两种异步模型与深度解析Future接口
本文有点长,但是满满的干货,以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类,希望大家踏下心来,打开你的IDE,跟着文章看源码,相信你一定收获不小!
冰河
2020/10/29
5580
FutureTask 核心源码解析
研究源码,一般我们都从整体以及实例先入手,再研究细节,不至于一开始就“深陷其中而"当局者迷".
用户7118337
2020/04/15
5650
线程池续:你必须要知道的线程池submit()实现原理之FutureTask!
FutureTask思维导图.png 前言 上一篇内容写了Java中线程池的实现原理及源码分析,说好的是实实在在的大满足,想通过一篇文章让大家对线程池有个透彻的了解,但是文章写完总觉得还缺点什
一枝花算不算浪漫
2020/06/01
2.1K0
理解Future及FutureTask的实现
Future是一种异步计算的模式,本文带你理解一下什么是Future,以及基本的FutureTask的实现原理。
Erwin
2020/08/17
1.3K0
Java并发编程之Future与FutureTask
我们都知道实现异步可以通过Runnable接口来实现,但是Runnable接口是无法获取任务的返回值的,如果需要获取到任务的返回值,那么就需要利用Future机制了。
Java进阶之路
2022/08/03
4180
【原创】Java并发编程系列36 | FutureTask
线程池源码中出现了很多Callable、Future、FutureTask等以前没介绍过的接口,尤其是线程池提交任务时总是把任务封装成FutureTask,今天就来为大家解惑:
java进阶架构师
2020/09/22
3780
【原创】Java并发编程系列36 | FutureTask
FutureTask 源码分析
FutureTask是一个支持取消行为的异步任务执行器。该类实现了Future接口的方法。 如: 取消任务执行 查询任务是否执行完成 获取任务执行结果(”get“任务必须得执行完成才能获取结果,否则会阻塞直至任务完成)。 注意:一旦任务执行完成或取消任务,则不能执行取消任务或者重新启动任务。(除非一开始就使用runAndReset模式运行任务) FutureTask实现了Runnable接口和Future接口,因此FutureTask可以传递到线程对象Thread或Excutor(线程池)来执行。 如果
java404
2018/05/18
7100
FutureTask源码分析
FutureTask:一个可取消的异步任务执行类,这个类提供了Future接口的基本实现,主要有以下功能:
haifeiWu
2018/09/11
4230
FutureTask源码分析
Java多线程-Furetue接口源代码详解
 不管是继承thread类重写run方法还是实现runnable接口实例对象后作为参数输入至Thread类的构造器中,都无法保证获取到之前的执行结果。通过实现Callback接口,并用Future可以来接收多线程的执行结果,而这就是我在上一篇关于Callable和Runnabe接口对比中的博客中所提到的,要彻底理解它们两者之间的差别,必须拿到Future的使用中来。
Fisherman渔夫
2020/02/19
6170
Android Handler机制12之Callable、Future和FutureTask
说到Callable就不能不说下java.lang.Runnable,它是一个接口,它只声明了一个run()方法,由于这个run()方法的返回值是void的,所以在执行完任务之后无法返回任何结果。
隔壁老李头
2018/08/30
7720
Android Handler机制12之Callable、Future和FutureTask
Java线程池异常处理
ThreadPoolExecutor 的 execute 方法不用过多分析, 就是线程池的执行流程, 这里看看 submit:
leobhao
2023/03/11
4830
探索 JUC 之美---Future 与 FutureTaskFuture介绍FutureTask数据结构及核心参数源码解析小结
Future Future 表示一个任务的生命周期,是一个可取消的异步运算。提供了相应的方法来判断任务状态(完成或取消),以及获取任务的结果和取消任务等。 适合具有可取消性和执行时间较长的异步任务
JavaEdge
2018/05/16
8820
Java并发编程之Future与FutureTask
我们都知道实现异步可以通过Runnable接口来实现,但是Runnable接口是无法获取任务的返回值的,如果需要获取到任务的返回值,那么就需要利用Future机制了。
科技新语
2025/06/05
1050
Java并发编程之Future与FutureTask
论异步编程的正确姿势:十个接口的活现在只需要一个接口就能搞定!
来源:https://juejin.cn/post/6844903901758504973
猿天地
2021/11/08
3080
多线程基础(十三):java中的FutureTask
可以看到,FutrueTask实现了RunnableFuture接口,而RunnableFuture接口又继承了Future和Runnable。如下图:
冬天里的懒猫
2020/10/29
3370
多线程基础(十三):java中的FutureTask
Future Java
Future是多线程开发中常见的一种设计模式。Future模式可以返回线程执行结果的契约,通过此契约程序可以选择在合适的时机取回执行的结果,如果取回结果时线程还没有执行完成,将会阻塞调用线程等待执行结果返回。
shysh95
2021/06/10
4480
Future Java
JUC线程池扩展可回调的Future
最近在看JUC线程池java.util.concurrent.ThreadPoolExecutor的源码实现,其中了解到java.util.concurrent.Future的实现原理。从目前java.util.concurrent.Future的实现来看,虽然实现了异步提交任务,但是任务结果的获取过程需要主动调用Future#get()或者Future#get(long timeout, TimeUnit unit),而前者是阻塞的,后者在异步任务执行时间不确定的情况下有可能需要进行轮询,这两种情况和异步调用的初衷有点相违背。于是笔者想结合目前了解到的Future实现原理的前提下扩展出支持(监听)回调的Future,思路上参考了Guava增强的ListenableFuture。本文编写的时候使用的JDK是JDK11,代码可以在JDK[8,12]版本上运行,其他版本可能不适合。
Throwable
2020/06/23
8680
推荐阅读
相关推荐
死磕 java线程系列之线程池深入解析——未来任务执行流程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验