远程执行命令通用脚本

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import time
import argparse
import datetime
import paramiko

reload(sys)
sys.setdefaultencoding("utf-8")

username = 'root'
password = ''


#change return color
def G(s):
    return "%s[32;2m%s%s[0m"%(chr(27), s, chr(27))
def R(s):
    return "%s[31;2m%s%s[0m"%(chr(27), s, chr(27))
 

def cmd_exc(ip, username, password):
    conn = paramiko.SSHClient()
    conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        conn.connect(hostname = ip, username = username, password = password, timeout = 10)
        stdin, stdout, stderr = conn.exec_command(cmd)
        result = stdout.readlines()
    except:
        print R("无法连接")
    conn.close()
    try:
        return G(result)
    except UnboundLocalError:
        pass


if __name__ == "__main__":
    parser=argparse.ArgumentParser(description='ssh_cmd', usage='%(prog)s [options]')
    parser.add_argument('-H','--host', nargs='?', dest='listhost', help='主机/多个主机用","分割')
    parser.add_argument('-f','--file', nargs='?', dest='filehost', help='主机列表文件')
    parser.add_argument('-m','--command', nargs='?', dest='command', help='执行命令')
    if len(sys.argv)==1:
        parser.print_help()
    else:
        args=parser.parse_args()
        cmd = args.command
        if args.listhost is not None and args.filehost is None and args.command is not None:
            for ip in args.listhost.split(','):
                print G(ip) 
                print G('-'*80)
                print cmd_exc(ip, username, password)
                print 
        elif args.listhost is None and args.filehost is not None and args.command is not None:
            try:
                with open(args.filehost) as f:
                    for ips in f.readlines():
                        ip = ips.replace('\n', '')
                        print G(ip)
                        print G('-'*80)
                        print cmd_exc(ip, username, password)
                        print 
            except IOError:
                print R('主机列表文件不存在')
        else:
            print R('主机或命令不能为空')


转载于:https://my.oschina.net/honglongwei/blog/669229

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值