基于pam实现的批量执行命令工具-Cyberark
无2fa版本:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#换了一种方式登录
#每天早上九点到晚上十点执行,每半小时一次,每次20台,大概4天-5天可以执行完所有机器import json
import os
import sys
import time
import datetime
import paramiko as paramiko
import pickle
import requests
import logginglogging.basicConfig(level=logging.INFO,#控制台打印的日志级别filename='pam.log',filemode='a',##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志#a是追加模式,默认如果不写的话,就是追加模式format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'#日志格式)
logger = logging.getLogger()
session = requests.session()def logon():url = "https://xxxx.com/PasswordVault/API/auth/Cyberark/Logon"data = {"username": "xxx", "password": "xxxxxx", }result = session.post(url, data=data)print(result.text)def get_accounts(offset, limit):url = "https://xxxx.com/PasswordVault/api/Accounts?&offset=%s&limit=%s" % (offset, limit)print(url)try:accounts = json.loads(session.get(url).text)["value"]except:print("cookies过期或密码错误,请重新运行代码。")os.remove("cookies")sys.exit()return accountsdef get_passwd(account_id):url = 'https://xxxx.com/PasswordVault/api/Accounts/%s/Password/Retrieve' % account_iddata = {'reason': "test", 'ActionType': "show", }ssh_key = session.post(url, data=data).text.strip('"')with open('id_rsa', 'w') as f:f.write(ssh_key)def ssh(account_ip, account_user):try:# 建立一个sshclient对象ssh = paramiko.SSHClient()# 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数# pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='12345')pkey = paramiko.RSAKey.from_private_key_file('id_rsa')# 建立连接ssh.connect(hostname=account_ip,port=22,username=account_user,pkey=pkey)# 执行命令,可以写多句命令stdin, stdout, stderr = ssh.exec_command("hostname")# 结果放到stdout中,如果有错误将放到stderr中logger.info(stdout.read().decode())logger.info(stderr.read())print(stdout.read().decode())print(stderr.read())# 关闭连接ssh.close()except Exception as e:logger.info("失败:")logger.info(str(account_ip))print("失败")print(account_ip)print("\n")if __name__ == '__main__':n = 0if os.path.exists('cookies'):with open('cookies', 'rb') as f:session.cookies.update(pickle.load(f))else:logon()with open('cookies', 'wb') as f:pickle.dump(session.cookies, f)offset = input("offset:输入需要从第几个账号开始遍历:")limit = input("limit:输入返回多少个账号(最大1000):")accounts = get_accounts(offset, limit)# 范围时间d_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '9:00', '%Y-%m-%d%H:%M')d_time1 = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '22:00', '%Y-%m-%d%H:%M')for account in accounts:# 当前时间n_time = datetime.datetime.now()# 判断当前时间是否在范围时间内if n_time > d_time and n_time < d_time1:# 判断是执行时间内就开始执行account_id = account["id"]account_ip = account["address"]account_user = account["userName"]get_passwd(account_id)# 连接ssh,执行命令ssh(account_ip, account_user)logger.info('这是第' + str(n) + '台机器' + '\n')logger.info(account_id)n += 1if n % 1 == 0:# time.sleep(1800)time.sleep(3)else:time.sleep(300)
基于pam实现的批量执行命令工具-Cyberark相关推荐
- Go 版批量执行命令工具
ansible 真的太慢了,而且依赖对端python环境,对于交换机,分流等基于ssh连接的网络设备就没办法了.用的最多的是批量执行命令和下发文件, 我们就借鉴ansible的执行方式,先准备yaml ...
- pssh远程批量执行命令
Pssh pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上 ...
- Scp远程批量执行命令
一次拷贝多个文件或者目录 # scp root@192.168.9.142:/usr/local/src/cp_dir/*.php /usr/local/src/ //拷贝多个文件 # scp -r ...
- pssh批量执行命令
Pssh pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上 ...
- Spark-shell 脚本批量执行命令,命令行批量执行命令
spark-shell 执行脚本,批量执行命令 #!/bin/bashsource /etc/profileexec spark-shell --name spark-sql-test --execu ...
- Python 实现远程服务器(ssh)批量执行命令
paramiko 远程控制介绍 Python paramiko是一个相当好用的远程登录模块,采用ssh协议,可以实现linux服务器的ssh远程登录.首先来看一个简单的例子 import parami ...
- linux批量执行命令脚本,2.3-命令批量执行脚本
命令批量执行脚本,同样需要两个脚本来实现:1 exe.expect 2 exe.sh 3 ip.list IP列表 cat exe.expect #!/usr/bin/expect set ho ...
- python批量运行cmd_python 之多主机批量执行命令
当我们有很多台linux服务器的时候,而每台服务器都需要做同一个操作,比如很多节点的集群环境下,要更改一个配置文件,哪怕只是一行,在传统情况下,也需要每台去单独操作. 最近也是有这样的需求,需要操作的 ...
- expect批量执行命令
在跳板机上执行脚本,登录到远程机器分区格式化挂载命令 #/bin/bash passwd='engine' /usr/bin/expect << EOF set time 40 spawn ...
最新文章
- 分分钟玩转多进程编程
- 将 Shiro 作为应用的权限基础 五:密码的加密/解密在Spring中的应用
- VMWare虚拟机下为Ubuntu 12.04.1配置静态IP(NAT方式)
- 通过/proc/PID/status查看进程内存占用情况
- 【Numpy学习记录】np.cov详解
- vue脚手架vue数据交互_学习Vue:3分钟的交互式Vue JS教程
- 信息学奥赛一本通C++语言——1035:等差数列末项计算
- 3-3HDFS架构详解
- 【Get】用深度学习识别手写数字
- 自然语言处理——语言模型(一)
- 35、html制作QQ彩贝热销时装页面(注意:需要素材)
- 计算机信息专业致谢词,计算机专业毕业论文致谢词
- 樊登读书搞定读后感_樊登读书会听书《搞定》《高效人士的七个习惯》《人生效率手册》《搞定3》第四周学习感悟...
- 阿里云服务器租用收费标准(精准费用报价更新)
- (转发)RJ45水晶头网线的做法
- 职位名称: Java技术经理
- highChart导出PDF
- 这台计算机上没有安装驱动程序,电脑打印机显示没有安装驱动怎么办啊
- java字符串流与管道流
- 制作一个古诗词的html,徐汉峰笔迹2136.诗词高手制作出万能词汇表.
热门文章
- vba怎么快速填充序列号?
- 阿里云大数据ACA考点总结
- django问题研讨:由master=true引发的奇怪现象
- Linux之ARM(IMX6U)裸机汇编LED驱动实验--烧写bin文件到SD卡中并运行
- arduino智能浇花系统_智能自浇花系统
- 为什么剩余数不能相加_为什么花的钱剩下的相加不等于花去的数
- (javascript)(基础知识+实例) 15.JSON,对象克隆,正则表达式
- leetcode1108-1111、1114-1117
- 华为鸿蒙的科技话题作文800字,关于科技的话题作文3篇
- Java对PDF进行电子签章CA签名认证