ssh模式和salt模式的实现思路
-
每台服务器装一个agent
-
每天定时启动这个脚本
-
agent —— 每台主机装上脚本(适用的场景:机器多)
-
每天定时启动脚本
-
脚本中通过subprocess模块 执行命令收集系统的信息
-
将采集的信息通过requests模块发送到api
-
api接受数据保存数据库
ssh —— 脚本放在中控机(适用的场景:机器少 不需要安装软件)
-
每天定时启动脚本
-
从api获取今天要采集的主机列表
-
通过paramiko模块 远程连接上主机执行命令收集系统的信息
-
将采集的信息通过requests模块发送到api
-
api接受数据保存数据库
salt—— 脚本放在中控机(适用的场景:安装saltstack 中控机装salt-master 被采集的主机安装salt-minion)
-
每天定时启动脚本
-
从api获取今天要采集的主机列表
-
通过subprocess或者salt 远程连接上主机执行命令收集系统的信息
-
将采集的信息通过requests模块发送到api
-
三种方式的代码
# ########### agent ########### # import subprocess # import requests # # a = subprocess.getoutput('dir') # print(a) # # # url = 'http://127.0.0.1:8000/api/asset/' # # ret = requests.post( # url=url, # data={'msg':a}, # ) # print(ret.text) # print(ret.json()) # ########### ssh ########### # import requests # # import paramiko # # # private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa') # # # 创建SSH对象 # ssh = paramiko.SSHClient() # # # 允许连接不在know_hosts文件中的主机 # ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # # # 连接服务器 # ssh.connect(hostname='10.0.0.128', port=22, username='root',password='1' ) # # # 执行命令 # stdin, stdout, stderr = ssh.exec_command('ls') # # 获取命令结果 # result = stdout.read() # # print(result.decode('utf-8')) # # 关闭连接 # ssh.close() # # # url = 'http://127.0.0.1:8000/api/asset/' # # ret = requests.post( # url=url, # data={'msg':result.decode('utf-8')}, # ) # print(ret.text) # print(ret.json()) # ########### salt ########### import subprocess ret = subprocess.getoutput("salt '{}' cmd.run '{}' ".format('*','ls')) import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])