- 主入口:
python3 jumpserver-object-query/scripts/jms_query.py <subcommand> ... - 常用子命令:
audit-list、audit-get、terminal-sessions、job-list、command-storage-hint、audit-analyze、capabilities。 - 页面型查询优先使用显式参数;低频页面字段再用
--filter key=value。 - 列表型和分析型命令默认会自动翻页,抓取并返回查询范围内的全部结果,不再支持
--limit/--offset。 - 查询型接口未显式给时间窗时默认最近 7 天;
--days只是输入快捷方式,不是最终下发给服务端的查询主参数。 - 命令审计在多
command storage环境下,普通查询优先沿用默认 storage;报告或汇总分析场景可显式传--command-storage-scope all汇总全部可访问 storage。
| 场景 | 推荐入口 | 当前显式参数 | 说明 |
|---|---|---|---|
| 操作日志 | audit-list --audit-type operate |
--search --user --action --resource-type |
--search 是页面搜索框;--user 会解析为页面显示值 name(username) |
| 登录日志 | audit-list --audit-type login |
--search --username --ip --type --city --mfa --status |
--username 下发页面精确字段;type 只支持 W/T/U |
| 改密日志 | audit-list --audit-type password_change |
--search --user --change-by --remote-addr |
--user 与 --change-by 都会解析为 name(username) |
| 作业日志 | audit-list --audit-type jobs |
--search --creator-name --material |
--creator-name 解析后下发创建者显示名 |
| 会话记录页面 | audit-list --audit-type terminal-session / terminal-sessions |
--search --user --account --asset --protocol --login-from --remote-addr --asset-id --order |
terminal-sessions 继续保留 --view online/history |
| 审计侧会话 | audit-list --audit-type session |
--search --user --account --asset --protocol --login-from --remote-addr --asset-id --order |
适合审计侧会话口径;需要页面同款在线/历史视图时优先 terminal-sessions |
| 命令记录页面 | audit-list --audit-type command |
--search --command-storage-id --command-storage-scope --asset-id --order |
这一轮只显式化已确认页面字段;低频字段继续走 --filter |
| 文件传输日志 | audit-list --audit-type ftp |
时间、--search |
页面型显式参数只保留已确认字段 |
| 作业列表 | job-list |
--search --name |
对应 /api/v1/audits/jobs/ 页面 |
补充规则:
- 用户类字段优先接受
username、name、name(username),唯一匹配后再转换成页面需要的显示值。 - 账号类字段会转换成
name(username);资产类字段会转换成name(ip)。 --search可与精确字段同时存在,最终按服务端 AND 语义组合。- 命名用户在某时间窗内“登录多少次”优先使用登录日志页面查询;默认统计该时间窗内的全部登录记录,只有明确要求成功/失败或页面
status口径时才传--status 1/0。 - 页面型命令不要把
audit-list --audit-type login --user、terminal-sessions --source-ip、泛化--keyword、泛化--direction当成首选写法。
- 查询型接口中的
--days会先换算成本地时间窗,再统一生成date_from/date_to请求参数;最终请求不再携带days。 - 显式传了
--date-from/--date-to时,以显式时间窗为准。 date_from=YYYY-MM-DD会补成本地当天00:00:00.000。date_to=YYYY-MM-DD会补成本地当天23:59:59.999。- 无时区字符串先按 skill 运行环境时区解释,再统一序列化为页面同款 UTC
...Z。 - 报表和 dashboard 不在这套规则里,仍保留原生
days。
| 能力 | 适用问题 |
|---|---|
command-record-query |
按用户 / 资产 / 命令关键字排查命令 |
high-risk-command-audit |
排查高危命令、拒绝命令 |
session-record-query |
查会话明细、协议、状态 |
file-transfer-log-query |
查文件上传 / 下载记录 |
abnormal-hours-login-query |
查异常时间段登录 |
abnormal-source-ip-login-query |
查异常来源 IP 登录 |
failed-login-statistics |
统计失败登录排行 |
privileged-account-usage-audit |
审计特权账号使用情况 |
session-behavior-statistics |
汇总会话行为统计 |
frequent-operation-user-ranking |
统计高频操作用户排行 |
suspicious-operation-summary |
跨命令、登录、会话、传输汇总可疑行为 |
user-session-analysis / asset-session-analysis |
从用户或资产维度分析会话行为 |
某用户某天连接过哪些机器:
- 先解析用户,再优先
audit-analyze --capability session-record-query - 若用户已经被解析成 UUID,固定传
filters.user_id;filters.user只保留显示名或用户名文本 - 返回时区分
session_count与去重后的assets - 不要先用
audit-list --audit-type session作为“是否有会话”的唯一依据
最近登录审计:
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-list --audit-type login
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-list --audit-type login --days 30 --username 示例用户(example.user)
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-list --audit-type login --days 30 --username 示例用户(example.user) --status 1最近操作日志:
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-list --audit-type operate --days 30 --user example.user --action 创建 --resource-type 'User session'改密日志与作业日志:
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-list --audit-type password_change --days 30 --user 示例管理员(admin.user) --change-by 示例用户(example.user) --remote-addr 203.0.113.10
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-list --audit-type jobs --days 30 --creator-name 示例用户 --material 'shell:ls'会话记录与作业列表:
python3 jumpserver-audit-investigation/scripts/jms_query.py terminal-sessions --view history --days 7 --user example.user --login-from WT
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-list --audit-type terminal-session --days 7 --asset demo-host --protocol ssh
python3 jumpserver-audit-investigation/scripts/jms_query.py job-list --name 删除Windows用户某用户某天连接过哪些机器:
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-analyze --capability session-record-query --user 示例用户 --date-from '2026-03-23 00:00:00' --date-to '2026-03-23 23:59:59'高危命令审计:
python3 jumpserver-audit-investigation/scripts/jms_query.py command-storage-hint
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-analyze --capability high-risk-command-audit --date-from '2026-03-01 00:00:00' --date-to '2026-03-20 23:59:59' --command-storage-id '<storage-id>'文件传输与命令记录分析:
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-analyze --capability file-transfer-log-query --direction upload --date-from '2026-03-01 00:00:00' --date-to '2026-03-20 23:59:59'
python3 jumpserver-audit-investigation/scripts/jms_query.py audit-analyze --capability command-record-query --date-from '2026-03-01 00:00:00' --date-to '2026-03-20 23:59:59' --command-storage-scope allsession_count与去重后的assets是两套口径;前者回答“连了几次 / 有多少会话”,后者回答“连了哪些机器 / 有多少台机器”。- 命名用户登录次数问题只要返回里有
summary.total,就直接用它回答;不要对显示出来的records手工计数。 - 多个命名用户的登录次数回答,先写清时间范围、组织和“全部登录记录 / 成功登录记录 / 失败登录记录”口径,再按用户逐行引用各自的
summary.total;除非用户明确要求汇总,否则不要先把多人的次数合并。 top_users、top_assets、ranking 一类排行榜默认可能是 Top N 或部分样本,排行榜不等于总量。- 若返回里有
summary.total,先把它当作权威总量;只有在榜单明确覆盖全量时,才允许用榜单求和去交叉验证。 - 若榜单只是部分数据,必须明确写“根据已返回榜单/样本数据”,不能直接写成整体总数或全体用户数。
- 不要写“从这次已返回记录看”“我逐条数出来的”这类样本口吻;命名用户登录次数默认按权威总量字段回答。
- 当用户问“某天连接了哪些机器”时,必须从
records中按用户提取并去重资产名称,不用top_assets代替明细。 - 不要把单个用户的会话数说成总会话数,也不要把单个资产的访问次数说成总访问量。
command审计记录里的id是 skill 生成的稳定 ID,后端原始瞬时行 ID 会保存在source_row_id里,仅用于排障观察。- 页面型查询结果里可能带
data_source、filter_strategy或其他诊断字段,用于对照本次实际命中的端点和过滤方式。 - 如果目标会话或命令发生在更早时间,请显式传
--days或--date-from/--date-to,不要直接把空结果解读成“没有记录”。