文档章节

ssh_thread.py

 蜗牛奔跑
发布于 2016/11/01 16:31
字数 519
阅读 7
收藏 0

#!/usr/bin/python
#coding:utf-8
import paramiko
import sys
import datetime
import threading
import Queue
import getopt

def usage():

    print """
              -h,-H,--help         帮助页面 
              -C, --cmd            执行命令模式 
              -M, --command        执行具体命令 
              -S, --sendfile       传输文件模式 
              -L, --localpath      本地文件路径 
              -R, --remotepath     远程服务器路径 
         IP列表格式:
            IP地址        用户名     密码     端口
         192.168.1.1        root      123456    22
          e.g.
              批量执行命令格式: -C "IP列表" -M '执行的命令'
              批量传送文件:     -S "IP列表" -L "本地文件路径" -R "远程文件路径"
          错误日志文件:$PWD/ssh_errors.log
"""

def ssh(queue_get,cmd):
    try:
        hostip=queue_get[0]
                username=queue_get[1]
                password=queue_get[2]
                port=queue_get[3]
            s=paramiko.SSHClient()
                s.load_system_host_keys()
            s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
               s.connect(hostname=hostip,port=port,username=username, password=password)
            stdin,stdout,stderr=s.exec_command(cmd)
            print "\033[42m---------------------------------%s---------------------------\033[0m \n %s" %(hostip,stdout.read())
            s.close()
    except Exception,ex:
            print "\033[42m---------------------------------%s---------------------------\033[0m\n %s : \t%s" %(hostip,hostip,ex)
                #print "\n",hostip,":\t",ex,"\n"
        ssh_errors=open("ssh_errors.log","a")
        ssh_errors.write("%s\t%s:\t%s\n"%(now,hostip,ex))
        ssh_errors.close()
                pass
def sftp(queue_get,localpath,remotepath):
    try:
        hostip=queue_get[0]
        username=queue_get[1]
                password=queue_get[2]
                port=int(queue_get[3])
         t=paramiko.Transport((hostip,port))
                   t.connect(username=username,password=password)
                sftp=paramiko.SFTPClient.from_transport(t)
        sftp.put(localpath,remotepath)
        print "Upload file %s to %s : %s: %s" %(localpath,hostip,remotepath,now)
        sftp.close()
        t.close()
        except Exception,ex:
              print "\n",hostip,":\t",ex,"\n"
                   ssh_errors=open("ssh_errors.log","a")
                   ssh_errors.write("%s\t%s:\t%s\n"%(now,hostip,ex))
                   ssh_errors.close()
                   pass

if __name__ == '__main__':
    try:
        opts,args= opts, args = getopt.getopt(sys.argv[1:], "(hH)C:M:S:L:R:", ["help","cmd=","command=","sendfile=","localpath=","remotepath="])
        now=datetime.datetime.now()
        if   len(sys.argv) == 1 :
            usage()    
            sys.exit()
        if sys.argv[1] in ("-h","-H","--help"):
            usage()
            sys.exit()
        elif sys.argv[1] in ("-C","--cmd"):
            for opt,arg in opts:
                if opt in ("-C","--cmd"):
                    iplist=arg
                if opt in ("-M","--command="):
                    cmd=arg
            
            file=open(iplist)
            threads = []
                       myqueue = Queue.Queue(maxsize = 0)
            for l in file.readlines():
                    if  len(l)==1 or  l.startswith('#'):
                           continue
                f=l.split()
                myqueue.put(f)
            file.close()
            for x in xrange(0,myqueue.qsize()):
                if myqueue.empty():
                                    break
                               mutex = threading.Lock()
                                mutex.acquire()
                            mutex.release()
                            threads.append(threading.Thread(target=ssh, args=(myqueue.get(),cmd)))
                       for t in threads:
                               t.start()
                               t.join()
        elif sys.argv[1] in ("-S","--sendfile"):
            for opt,arg in opts:
                if opt in ("-S","--sendfile"):
                    iplist=arg
                if opt in ("-L","--localpath="):
                    localpath=arg
                if opt in ("-R","--remotepath="):
                    remotepath=arg

            file=open(iplist)
            threads = []
                       myqueue = Queue.Queue(maxsize = 0)
            for l in file.readlines():
                    if  len(l)==1 or  l.startswith('#'):
                           continue
                f=l.split()
                myqueue.put(f)
            file.close()
            for x in xrange(0,myqueue.qsize()):
                if myqueue.empty():
                                    break
                               mutex = threading.Lock()
                                mutex.acquire()
                            mutex.release()
                            threads.append(threading.Thread(target=sftp, args=(myqueue.get(),localpath,remotepath)))
                       for t in threads:
                               t.start()
                               t.join()
        
        else:
            print "\033[31m非法参数,请重新输入!\033[0m"
            #usage()
    except Exception,ex:
        usage()
        print ex

本文转载自:

上一篇: check_ping.py
粉丝 38
博文 615
码字总数 118352
作品 0
海淀
私信 提问
python 多线程实现多客户端连接的 TCP Server

最近看《python核心编程》,书中实现了一个简单的1对1的TCPserver,但是在实际使用中1对1的形势明显是不行的,所以研究了一下如何在server端通过启动不同的线程(进程)来实现每个链接一个线...

大数据之路
2013/01/25
4.4K
3
手把手教你写网络爬虫(2):迷你爬虫架构

原文出处:拓海 介绍 大家好!回顾上一期,我们在介绍了爬虫的基本概念之后,就利用各种工具横冲直撞的完成了一个小爬虫,目的就是猛、糙、快,方便初学者上手,建立信心。对于有一定基础的读...

拓海
2018/04/27
0
0
LewisChan/wot_gateway

工程目录结构简述 此Python网关中间件工程包含在wot_gateway文件夹内,各文件夹及文件功能简述如下: cfg/ dev_property.xml: 设备属性信息(向平台添加设备时用到) gw_property.xml: 网关属...

LewisChan
2015/05/26
0
0
Python的GIL是什么鬼,多线程性能究竟如何

Python的GIL是什么鬼,多线程性能究竟如何 前言:博主在刚接触Python的时候时常听到GIL这个词,并且发现这个词经常和Python无法高效的实现多线程划上等号。本着不光要知其然,还要知其所以然...

翼动动空
2016/05/11
405
0
git 在mac上使用git clone时每次需要输入密码的解决方案

Generating a new SSH key and adding it to the ssh-agent MAC WINDOWS LINUX After you've checked for existing SSH keys, you can generate a new SSH key to use for authentication, t......

张宏亮1982
2018/05/13
32
0

没有更多内容

加载失败,请刷新页面

加载更多

Flutter 之页面切换(命名路由)

命名路由 之前的文章介绍过基本路由,使用基本路由相对简单灵活,适用于应用中页面不多的场景。而在应用中页面比较多的情况下,再使用基本路由,会导致大量的重复代码,此时使用命名路由会非...

過愙
22分钟前
2
0
shell脚本批量调用接口

正文   要求在页面查询到5000条数据,为了方便插入,用shell脚本写curl命令调用自己写的代码接口; 脚本如下: #!/bin/basha=0while [ $a -le 10 ]; do # length of ts is 13 requi...

码农实战
25分钟前
2
0
使用TensorFlow的AI程序运行报错AttributeError: module 'tensorflow' has no attribute 'xxx'

使用TensorFlow的AI程序,在运行时报错AttributeError: module 'tensorflow' has no attribute 'xxx',首先检查是否是包路径不对,一般是版本变化所致。...

织梦之魂
今天
4
0
提示浏览器版本低

本文转载于:专业的前端网站➭提示浏览器版本低 网站网页在遇到浏览器低版本(尤其是IE浏览器)时,提示浏览器版本低(如IE8以及以下),建议用户升级浏览器以获得最好体验。以下是代码: 1...

前端老手
今天
6
0
CentOS 7系统增加swap

转载请注明文章出处:CentOS 7系统增加swap swap是位于磁盘上的特殊文件(或分区),属于“虚拟内存”的一部分。通俗点就是内存的备胎,内存充足的情况下,基本上没swap什么事(和设置有关)...

tlanyan
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部