Skip to content

Pa55w0rd/jms-sync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JMS-Sync 资产同步工具

将阿里云 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          # 结果输出到JSON

测试

pytest tests/ -v

系统要求

  • Python 3.8+
  • JumpServer v4.7.0+
  • 云平台 API 访问凭证

配置说明

编辑 config.yaml,主要配置项:

JumpServer

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: true

同步选项

sync:
  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 前置配置

使用前需在 JumpServer 中:

  1. 创建网域:资产管理 → 网域列表 → 创建,记录网域 ID 填入 domain_id
  2. 设置网关(如需跨网络访问):在网域中添加网关

故障排除

同名资产处理

创建/更新前会预检名称冲突:

  • 目标名称被另一个 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

About

一个高效的多云平台资产自动同步工具,用于将阿里云、华为云等平台的云服务器实例同步到JumpServer堡垒机,实现资产的自动化管理与运维安全保障。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages