简介:本文全面解析JumpServer API文档,涵盖认证、核心功能接口及最佳实践,助力开发者高效集成自动化运维能力。
JumpServer作为全球首款开源的堡垒机系统,其API文档为开发者提供了与系统交互的标准化接口。通过RESTful API设计,开发者可以实现用户管理、资产操作、会话审计等核心功能的自动化集成。本文将围绕API文档的结构、认证机制及核心接口展开详细解析,帮助开发者快速掌握JumpServer API的使用方法。
JumpServer API文档采用模块化设计,主要分为以下几个部分:
文档采用OpenAPI 3.0规范编写,支持Swagger UI在线调试,开发者可通过/api/v1/docs/路径访问交互式文档。
JumpServer API使用JWT(JSON Web Token)进行认证,认证流程如下:
POST /api/v1/authentication/connection/请求,携带用户名和密码token的响应Authorization头中携带Bearer <token>
# Python示例:获取API Tokenimport requestsurl = "http://jumpserver-host/api/v1/authentication/connection/"data = {"username": "admin","password": "your_password"}response = requests.post(url, json=data)token = response.json().get("token")print(f"Access Token: {token}")
POST /api/v1/users/users/接口支持批量创建用户,关键参数包括:
username:必填,唯一标识password:可选,空值时需通过其他方式重置groups:关联用户组ID列表
{"username": "dev_user","name": "Developer","groups": [1]}
通过PUT /api/v1/users/users/{id}/接口可更新用户角色,支持同时分配系统角色和组织角色:
# 更新用户角色示例user_id = 123role_data = {"roles": [2, 3], # 系统角色ID列表"organizations": [1] # 组织ID}requests.put(f"/api/v1/users/users/{user_id}/", json=role_data)
资产分组采用树形结构,POST /api/v1/assets/nodes/接口创建节点时需指定:
key:节点唯一标识value:显示名称parent:父节点ID(根节点为null)JumpServer支持SSH、RDP、VNC等20+种协议,配置示例:
{"name": "Web Server","ip": "192.168.1.100","protocols": [{"type": "ssh","port": 22,"auth_strategy": "password"}]}
GET /api/v1/terminal/sessions/接口返回当前活跃会话列表,关键字段包括:
id:会话唯一标识user:关联用户信息asset:目标资产信息protocol:使用的协议类型通过GET /api/v1/terminal/command-storage/{id}/replay/可获取会话录像文件,支持分片下载:
# 分片下载会话录像session_id = 456url = f"/api/v1/terminal/command-storage/{session_id}/replay/"response = requests.get(url, stream=True)with open("session.replay", "wb") as f:for chunk in response.iter_content(chunk_size=8192):f.write(chunk)
JumpServer API遵循HTTP状态码规范,常见错误码包括:
400 Bad Request:参数验证失败401 Unauthorized:Token过期或无效403 Forbidden:权限不足404 Not Found:资源不存在建议实现重试机制处理临时性错误:
from requests.adapters import HTTPAdapterfrom urllib3.util.retry import Retrysession = requests.Session()retries = Retry(total=3, backoff_factor=1)session.mount("http://", HTTPAdapter(max_retries=retries))
/api/v1/users/users/batch/)limit和offset参数?fields=id,username指定返回字段通过API实现自动化资产录入:
#!/bin/bash# 新增资产脚本示例TOKEN="your_jwt_token"JUMPSERVER_URL="http://jumpserver-host"curl -X POST "$JUMPSERVER_URL/api/v1/assets/assets/" \-H "Authorization: Bearer $TOKEN" \-H "Content-Type: application/json" \-d '{"name": "New Server","ip": "10.0.0.5","platform": "Linux","nodes": [1]}'
结合审计日志接口生成每日操作报告:
import pandas as pdfrom datetime import datetime, timedeltadef generate_audit_report(days=1):end_date = datetime.now()start_date = end_date - timedelta(days=days)params = {"datetime_start": start_date.isoformat(),"datetime_end": end_date.isoformat(),"limit": 1000}response = requests.get("http://jumpserver-host/api/v1/audits/user-logins/",params=params,headers={"Authorization": f"Bearer {TOKEN}"})df = pd.DataFrame(response.json()["results"])df.to_csv(f"audit_report_{end_date.date()}.csv")
问题表现:频繁收到401 Unauthorized响应
解决方案:
优化措施:
配置/etc/jumpserver/config.yml中的CORS设置:
CORS_ORIGIN_ALLOW_ALL: true# 或指定域名CORS_ORIGIN_WHITELIST:- "https://your-domain.com"
JumpServer API保持向后兼容,但需注意:
user_id改为userId)建议通过/api/v1/version/接口检查服务器版本:
response = requests.get("http://jumpserver-host/api/v1/version/")print(f"JumpServer Version: {response.json()['version']}")
本文系统梳理了JumpServer API的核心功能与使用技巧,通过实际代码示例展示了从基础认证到高级集成的完整流程。开发者可根据实际需求灵活组合这些接口,构建符合企业安全规范的自动化运维体系。建议定期查阅官方文档更新日志,以获取最新功能特性。