将阿里云 ECS、华为云 ECS、本地机房虚拟机的资产同步到 JumpServer 堡垒机。
pip install -r requirements.txt
cp config.yaml.example config.yaml # 编辑填写实际配置
python jms-sync.py更多运行选项:
python jms-sync.py -c custom-config.yaml # 指定配置文件
python jms-sync.py -l DEBUG # 开启详细日志
python jms-sync.py -r 5 -i 10 # 重试5次,间隔10秒
python jms-sync.py -o results.json # 结果输出到JSONpytest tests/ -v- Python 3.8+
- JumpServer v4.7.0+
- 云平台 API 访问凭证
编辑 config.yaml,主要配置项:
jumpserver:
url: "https://jumpserver.example.com"
access_key_id: "uuid"
access_key_secret: "secret"
org_id: "uuid"
root_node_id: "uuid" # 资产同步的根节点clouds:
- type: "阿里云" # 或 "华为云"、"本地机房"
name: "prod" # 账号标识,作为三级节点名 /DEFAULT/阿里云/prod
access_key_id: "key"
access_key_secret: "secret"
regions: ["cn-beijing"]
domain_id: "uuid" # JumpServer 网域ID,无跨网络可留空
enabled: true
# 本地机房额外参数
- type: "本地机房"
name: "SZ-LOCAL"
api_base_url: "https://192.168.x.x"
auth_cookie: "cookie"
verify_ssl: false # 默认false
tls_security_level: 1 # 1-3,默认1兼容老设备
enabled: truesync:
max_delete_ratio: 0.5 # 单次最多删除50%资产,超过则中止删除
whitelist: [] # IP白名单,空=不限制
protected_ips: [] # 这些IP的资产不会被删除
no_delete: false # 设为true禁用所有删除notification:
dingtalk:
enabled: true
webhook: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
secret: "SECxxx" # 签名密钥,用签名模式时填写
at_mobiles: ["138xxx"]
at_all: false完整配置项见 config.yaml.example。
- 以
instance_id为主键匹配云资产和 JumpServer 资产,匹配不上时回退到 IP 匹配 - 同步顺序:先删除、再更新、最后创建,避免主机名冲突
- 名称冲突时自动追加 instance_id 后 8 位作为后缀
max_delete_ratio防误删:当待删除比例超过阈值时跳过删除并告警- 本地机房资产按分组(node_name)分别同步到对应的 JumpServer 节点
使用前需在 JumpServer 中:
- 创建网域:资产管理 → 网域列表 → 创建,记录网域 ID 填入
domain_id - 设置网关(如需跨网络访问):在网域中添加网关
创建/更新前会预检名称冲突:
- 目标名称被另一个 instance_id 的资产占用 → 追加 instance_id 后 8 位
- 同一 instance_id → 不冲突,正常更新
- API 返回 400 → 生成带后缀的安全名称重试(最多 2 次)
| 问题 | 排查方向 |
|---|---|
| 连接超时 | 检查网络/防火墙,确认 API 地址,增加 -r 重试次数 |
| 认证失败 | 检查密钥是否正确且未过期,确认系统时间准确 |
| 同步失败 | 查看 logs/jms-sync.log,加 -l DEBUG 获取详细日志 |
| 通知发送失败 | 检查 webhook 地址和签名密钥,确认网络可达钉钉服务器 |
tail -f logs/jms-sync.log # 全部日志
tail -f logs/jms-sync.error.log # 仅错误日志config.yaml包含凭证,不要提交到 Git(已在 .gitignore 中)- 为同步工具创建最小权限的 API 密钥(云平台只需 ECS 只读,JumpServer 只需资产管理)
- 建议使用 HTTPS 连接 JumpServer
MIT License