本站以分享各种运维经验和运维所需要的技能为主
《python零基础入门》:python零基础入门学习
《python运维脚本》: python运维脚本实践
《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战
《k8》暂未更新
《docker学习》暂未更新
《ceph学习》ceph日常问题解决分享
《日志收集》ELK+各种中间件
《运维日常》运维日常
《linux》运维面试100问
公司的服务器日益增多的时候,管理起来就需要一个cmdb的平台进行管理。
JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。
JumpServer 使用 Python 开发,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。
JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。
改变世界,从一点点开始。
[工作随笔]JumpServer排坑安装及二次开发-腾讯云开发者社区-腾讯云
满足添加自动添加云机器信息入jumpserver。
- # -*- coding: utf-8 -*-
-
-
- import requests, datetime, json
- from httpsig.requests_auth import HTTPSignatureAuth
-
- KeyID = '77e76d19-141c-4545--xxx'
- SecretID = 'a04817bc-0bb1-439f-baa2-xxxx'
- gmt_form = '%a, %d %b %Y %H:%M:%S GMT'
- ptivate_token = 'xxxxx'
-
- headers = {
- 'accept': 'application/json',
- 'Content-Type': 'application/json',
- # 'X-CSRFToken': 'eoLo2AVcQK5X1JQ392JHCzjZ8wPCWZJFJao5O9ObH8zQwtiPhGBzaOnNKjaENShf',
- "Authorization": 'Token ' + ptivate_token,
- 'X-JMS-ORG': '00000000-0000-0000-0000-000000000002',
- 'Date': datetime.datetime.utcnow().strftime(gmt_form)
- }
-
-
- # 认证
- def get_auth(KeyID, SecretID):
- """
- 认证
- :param KeyID: The key ID
- :param SecretID: The secret ID
- :return:
- """
- signature_headers = ['(request-target)', 'accept', 'date']
- auth = HTTPSignatureAuth(key_id=KeyID, secret=SecretID, algorithm='hmac-sha256', headers=signature_headers)
- return auth
-
-
- auth = get_auth(KeyID, SecretID)
-
-
- # 获取所有用户
- def get_user_all():
- """
- 获取所有用户
- :return:
- """
- url = jms_url + '/api/v1/users/users/'
- response = requests.get(url, auth=auth, headers=headers)
- user_list = json.loads(response.text)
- count = 0
- for i in user_list:
- count += 1
- print(i)
- print(count)
-
-
- # 获取监控指标
- def get_prometheus_metric():
- """
- 获取监控指标
- :return:
- """
- url = jms_url + "/api/v1/prometheus/metrics/"
- response = requests.get(url, headers=headers, auth=auth)
- print(response.text)
- return response.text
-
-
- # 获取所有资产节点
- def get_node_all():
- """
- 获取所有资产节点
- :return:
- """
- url = jms_url + "/api/v1/assets/nodes/"
- response = requests.get(url, headers=headers, auth=auth)
- node_list = json.loads(response.text)
- count = 0
- for i in node_list:
- count += 1
- print(i)
- print(count)
- return response.json()
-
-
- # 查看当前token(即admin)的所有资产
- def get_asset_all():
- """
- 查看当前token(即admin)的所有资产
- :return:
- """
- url = jms_url + "/api/v1/assets/assets/"
- response = requests.get(url, headers=headers, auth=auth)
- node_list = json.loads(response.text)
- count = 0
- for i in node_list:
- count += 1
- print(i)
- print(count)
- return response.json()
-
-
- ###################################################################################################
- # 创建资产节点
- def assets_nodes_create(node_name):
- """
- 创建资产节点
- :param node_name:
- :return:
- """
- node_data = {
- "value": node_name
- }
- url = jms_url + "/api/v1/assets/nodes/"
- node_info = get_node_info(node_name)
- if node_info: # 根据node_name去查询,如果查到了说明已经有了。
- print("{name}已存在, id: {id}".format(name=node_name, id=node_info[0]["id"]))
- else:
- data = json.dumps(node_data)
- resp = requests.post(url, headers=headers, data=data)
- return resp.json()
-
-
- #
- def get_assets_list_by_ip(ip):
- """
- 根据ip获取资产信息
- :param ip:
- :return:
- """
- url = jms_url + "/api/v1/assets/assets/"
- response = requests.get(url, headers=headers, params={
- "ip": ip
- })
- print(response.json())
- return response.json()
-
-
- # 查看资产节点信息
- def get_node_info(node_name):
- """
- 查看资产节点信息
- :param node_name: 节点名称
- :return:
- """
- url = jms_url + "/api/v1/assets/nodes/"
- response = requests.get(url, auth=auth, headers=headers, params={
- "value": node_name
- })
- print(response.text)
- return response.json()
-
-
- # 创建资产机器
- def asset_create(ip, hostname, node_id, comment):
- """
- 创建资产机器
- :param ip: ip地址
- :param hostname: 主机名
- :param node_id: 节点id
- :return: 返回创建的资产信息
- """
- asset_Data = {
- "name": hostname,
- "address": ip,
- "platform": "1",
- "protocols": [{
-
- "name": "ssh",
- "port": 22
- }],
- "is_active": True,
- "nodes": [node_id],
- "comment": comment,
- "accounts": [{
- # 账号模板id
- "template": "60b11033-a6e1-467d-8388-68a0e64134ff",
- }]
- }
- url = jms_url + "/api/v1/assets/hosts/"
- print(url)
- data = json.dumps(asset_Data)
- print(data)
- response = requests.post(url, auth=auth, headers=headers, data=data)
- print(response.text)
-
-
- # 运行创建服务器资产
- def run_create_assets(node_name, project_name, ip, comment):
- """
- 运行创建服务器资产
- :param node_name: 节点名称
- :param project_name: 机器名称
- :param ip: ip地址
- :param comment: 备注
- :return:
- """
- # 节点id,无节点时创建节点
- node_info = get_node_info(node_name)
-
- # 如果len(node_info) == 0 说明没有节点,需要创建节点
- if len(node_info) == 0:
- # 创建节点
- node_id = assets_nodes_create(node_name)
- print(node_id)
- else:
- # 获取节点id
- node_id = node_info[0]["id"]
- print(node_id)
- # 管理用户 id
- hostname = "{ip}_{project_name}".format(ip=ip, project_name=project_name)
- # 查IP,创建资产
- ip_info = get_assets_list_by_ip(ip)
- if ip_info:
- print("%s 已存在,nodes: %s" % (ip_info[0]["address"], ip_info[0]["nodes"]))
- else:
- asset_create(ip, hostname, node_id, comment)
-
-
- def get_org_info():
- """
- 获取组织信息
- :return:
- """
- url = jms_url + "/api/v1/orgs/orgs/"
- response = requests.get(url, headers=headers)
- org_list = response.text
- print(org_list)
- for i in org_list.split("id"):
- print(i)
-
- return response.json()
-
-
- if __name__ == '__main__':
- jms_url = 'https://jms.xxx.top'
- username = 'admin'
- password = 'xxxxxx'
-
- # 获取token
- # token = get_token(jms_url, username, password)
-
- # 创建资产节点
- # assets_nodes_create("k8s")
-
- # 根据ip获取资产信息
- # get_assets_list_by_ip("192.168.11.10")
-
- # 查看资产节点信息
- # get_node_info("k8s")
-
- # 创建资产调用
- # node_id = ["e8641c37-93e3-450e-aaf8-64d5baa69753"]
- # get_node_info("k8s")
- # asset_create(ip, hostname, node_id)
-
- # 运行创建服务器资产
- # run_create_assets("test", "风控", "192.168.11.10", "测试")
-
- # 获取组织信息
- # get_org_info()
-
- # 获取所有用户
- get_user_all()
-
需要基础是django 的大框架以及一些前端知识