Compare commits

...

1410 Commits
v3.8.1 ... v4.4

Author SHA1 Message Date
Eric
eea34e6032 perf: add dbeaver-patch version 2024-12-03 17:27:44 +08:00
Bai
69a366978f fix: login log get ipv6 error 2024-11-29 14:58:56 +08:00
Aaron3S
fb634dca4c fix: Fix the uncaught exception when face capture fails 2024-11-25 10:08:59 +08:00
Bai
b045a64496 fix: libldap2-dev 2024-11-21 22:25:46 +08:00
Bai
77e471022f fix: libldap2-dev 2024-11-21 21:31:10 +08:00
Bryan
25987545db Merge pull request #14511 from jumpserver/dev
v4.4.0
2024-11-21 19:00:35 +08:00
wangruidong
f7313bfcc1 perf: Audits job api disable periodic task 2024-11-21 18:56:16 +08:00
Bai
d2f7376f78 fix: job execution stop failed 2024-11-21 18:38:10 +08:00
wangruidong
6db56eb2aa fix: view ops job celery log no perms 2024-11-21 18:14:45 +08:00
fit2bot
442290703a fix: pyfreerdp verify account, the default value of gateway_args field is wrong (#14490)
* fix: pyfreerdp verify account, the default value of gateway_args field is wrong

* fix: pyfreerdp verify account, the default value of gateway_args field is wrong

---------

Co-authored-by: Ewall555 <a03216@foxmail.com>
2024-11-21 14:26:22 +08:00
feng
e491a724ed perf: Video player download 2024-11-21 14:25:50 +08:00
feng
230924baac fix: Vault proxy 2024-11-21 13:40:33 +08:00
wangruidong
0ae2f04f28 fix: view ops job celery log no perms 2024-11-21 13:24:29 +08:00
feng
68a490d305 perf: Hide azure vault 2024-11-21 13:02:40 +08:00
wangruidong
6abfeee683 feat: Add periodic display and validate job params 2024-11-20 22:07:56 +08:00
Aaron3S
1a03f7b265 feat: add license edition check 2024-11-20 20:09:11 +08:00
feng
2dae2b3789 perf: Translate 2024-11-20 18:21:31 +08:00
Aaron3S
bdbbebab76 feat: perf face capture page 2024-11-20 17:54:27 +08:00
Chenyang Shen
33170887f4 Merge pull request #14495 from jumpserver/pr@dev@feat_add_check_api_white_list
feat: add 'face_context' to check_api white list
2024-11-20 17:52:06 +08:00
Aaron3S
88302c8846 feat: add 'face_context' to check_api white list 2024-11-20 16:38:22 +08:00
feng
4068b5c76a perf: Change secret ssh_key_change_strategy modify the default value 2024-11-20 16:27:21 +08:00
feng
9966ad4c71 perf: Dynamic update vault 2024-11-20 15:58:20 +08:00
Aaron3S
9cfe974c52 feat: 添加 mfa middleware 白名单 2024-11-20 14:18:52 +08:00
feng
d9a9f890f5 perf: Lina AzureKeyVault translate 2024-11-20 14:08:27 +08:00
fit2bot
e2904ab042 perf: Custom SMS (files) support obtaining more user information. (#14486)
* perf: Custom SMS (files) support obtaining more user information.

* perf: Remove the useless modules

* perf: modify

---------

Co-authored-by: jiangweidong <1053570670@qq.com>
2024-11-20 10:29:14 +08:00
Aaron3S
f92c557235 feat: 增加人脸识别超时控制 2024-11-20 10:27:04 +08:00
halo
cfadbc164c perf: If the cloud vault initialization fails, the task will not be executed. 2024-11-20 10:15:14 +08:00
feng
374a102bc4 perf: Translate 2024-11-19 18:58:43 +08:00
feng
84e1411c22 fix: Clone endpoint 500 2024-11-19 18:09:00 +08:00
wangruidong
e28bf170d1 perf: MFA Translate 2024-11-19 17:55:11 +08:00
wangruidong
7c9e3a1362 perf: Optimize summary calculation 2024-11-19 17:55:11 +08:00
feng
fba80342a5 perf: Translate 2024-11-19 17:54:45 +08:00
Aaron3S
5eeff0aabf feat: 设置人脸上下文存活时间 2024-11-19 17:34:44 +08:00
Aaron3S
5b4de02fff feat: 增加绑定成功失败提示 2024-11-19 17:30:31 +08:00
wangruidong
b6a5854fa2 perf: Optimize summary calculation 2024-11-19 16:13:38 +08:00
Chenyang Shen
9771d3c817 Merge pull request #14476 from jumpserver/pr@dev@feat_add_face_i18n
FEAT: Add face recognition translation
2024-11-19 15:11:03 +08:00
Aaron3S
b33a0cf0b1 feat: 添加人脸识别翻译 2024-11-19 15:08:39 +08:00
Chenyang Shen
f9fa6ad9c1 Merge pull request #14474 from jumpserver/pr@dev@feat_update_face_capture_page
feat: Optimized the face collection page
2024-11-19 15:01:45 +08:00
Aaron3S
4b2db2b6a1 feat: 优化人脸采集页面 2024-11-19 14:28:31 +08:00
Halo
822b353a40 perf: Translate (#14468)
* feat: azure key vault

* perf: add azure-keyvault-secrets

* perf:azure kv api

* perf: Translate

* perf: Update Dockerfile with new base image tag

* perf: Error when secret is empty

* perf: Translate

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-18 18:48:33 +08:00
feng
2908d4ee5f perf: Delete asset fail 2024-11-18 10:08:37 +08:00
wangruidong
482c4ced0c perf: Translate 2024-11-15 18:00:35 +08:00
halo
b2a5e457a9 fix: vault synchronization task exception 2024-11-15 17:46:17 +08:00
wangruidong
343c3607fa fix: modify job audit rbac 2024-11-15 15:47:20 +08:00
wangruidong
f03263eedf fix: Radius login failed 2024-11-15 15:44:05 +08:00
Aaron3S
98d7ecbf3e fix: 修改错误的url地址 2024-11-13 17:35:43 +08:00
halo
477ccda8ca perf: VAULT_BACKEND cannot be modified from the frontend 2024-11-13 17:31:47 +08:00
wangruidong
fcdc2b9510 fix: Solve audit job and variable bugs 2024-11-13 17:31:17 +08:00
wangruidong
1ee57cfda0 perf: ticket info add org name 2024-11-12 18:15:31 +08:00
wangruidong
804bd289a4 fix: Other people can delete adhoc or playbook 2024-11-12 17:44:21 +08:00
Aaron3S
86273865c8 feat: 增加人脸识别功能 2024-11-12 17:41:39 +08:00
Eric
5142f0340c perf: add license info for component config 2024-11-12 16:52:45 +08:00
Bai
7c80c52d02 fix: Set the default language to en 2024-11-12 15:43:57 +08:00
Bai
eb30b61ca9 fix: Set the default language to en 2024-11-12 15:38:01 +08:00
wangruidong
dd5a272cdf perf: Add task handler for ops job with creator assignment 2024-11-12 15:16:01 +08:00
wangruidong
5b27acf4ef perf: Admin and auditor can view and stop task 2024-11-12 11:25:12 +08:00
Eric
1a41a7450e perf: vnc proxy port to 15900 2024-11-11 19:46:24 +08:00
fit2bot
e1b501c7d4 feat: azure key vault (#14406)
* feat: azure key vault

* perf: add azure-keyvault-secrets

* perf:azure kv api

* perf: Translate

* perf: Update Dockerfile with new base image tag

* perf: Error when secret is empty

* perf: Translate

---------

Co-authored-by: halo <wuyihuangw@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-11 19:41:47 +08:00
Eric
b660bfb7ff perf: add nec vnc component and endpoint migrations 2024-11-11 18:54:52 +08:00
wangruidong
5724912480 perf: Add check for SECURITY_COMMAND_EXECUTION settings in ops tasks 2024-11-11 18:14:43 +08:00
feng
11b3bafd5a perf: Translate 2024-11-08 15:34:37 +08:00
wangruidong
9f90838df1 perf: Optimize username handling in push_account 2024-11-07 10:47:01 +08:00
wangruidong
b01916001e fix: User import fails if MFA field is set to Disabled (0) 2024-11-07 10:45:05 +08:00
fit2bot
c96ae1022b feat: Supports running adhoc,playbook with variable (#14417)
* perf:Create a job that supports adding node parameters

* feat: add variable model

* feat: Modify Variable and AdHoc models,

* feat: Parameters can be set when running job

* feat: Supports setting  variable type

* feat: Supports running adhoc with parameters

* feat: Supports running playbook with parameters

* fix: Translate

* feat: Support setting variables for scheduled tasks

* perf: Translate

---------

Co-authored-by: wangruidong <940853815@qq.com>
2024-11-07 10:38:34 +08:00
jiangweidong
8f11167db0 perf: i18n - Supports automatic release of assets and prevents accidental release of network errors 2024-11-06 15:07:26 +08:00
老广
a53397b76f Update llm-code-review.yml 2024-11-05 18:20:38 +08:00
老广
8f13224454 Create llm-code-review.yml 2024-11-04 18:34:06 +08:00
Bai
8f4dd25e69 feat: DEFAULT_EXPIRED_YEARS put in public settings API 2024-11-01 18:24:54 +08:00
Bai
9c8762e3a0 feat: support configuration DEFAULT_EXPIRED_YEARS 2024-11-01 15:48:57 +08:00
Bai
a8cf788122 feat: add GitHub Action to automatically publish release notes to Discord changelog channel. 2024-11-01 15:24:07 +08:00
Bai
7355a4f152 feat: add GitHub Action to automatically publish release notes to Discord changelog channel. 2024-11-01 14:21:48 +08:00
ibuler
2cf80e6615 perf: login success to call client 2024-10-31 18:36:42 +08:00
ibuler
9a18ed631c fix: oracle platform create error 2024-10-30 16:33:18 +08:00
Bai
1e16f1cb9f fix: console dashboard proportion describe 2024-10-29 19:09:50 +08:00
fit2bot
35b8b080ab perf: add to cron.d (#14375)
* perf: add to cron.d

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: ibuler <ibuler@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-10-29 16:15:07 +08:00
ibuler
4219d54db3 perf: add cron in dockerfile 2024-10-29 15:39:54 +08:00
ibuler
c3620254b3 perf: change docker file 2024-10-29 15:32:57 +08:00
fit2bot
d30de0b6a0 perf: update chrome applets hang (#14353)
* perf: update chrome applets hang

* perf: remove debug print

---------

Co-authored-by: Eric <xplzv@126.com>
2024-10-29 15:19:15 +08:00
github-actions[bot]
af91b6faeb perf: Update Dockerfile with new base image tag 2024-10-29 15:18:24 +08:00
ibuler
49b84b019d perf: using poetry mirror 2024-10-29 15:18:24 +08:00
ibuler
a0ee520572 perf: remove cache 2024-10-29 15:18:24 +08:00
fit2bot
972afe0bfe perf: revert old deps (#14371)
* perf: revert old deps

* perf: update poetry

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: ibuler <ibuler@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-10-29 14:24:31 +08:00
wangruidong
e47e9b0a11 fix: Unique basename 2024-10-29 11:38:46 +08:00
fit2bot
87e54d8823 perf: add cron (#14364)
* perf: add cron

* Update Dockerfile-base

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: ibuler <ibuler@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-10-29 10:56:42 +08:00
jiangweidong
a73c8d8285 fix: Wechat ticket message some url cannot clicked 2024-10-25 15:05:13 +08:00
Eric
b0dd8d044d perf: add error msg when applet task failed 2024-10-24 14:55:33 +08:00
jiangweidong
7c55c42582 perf: Links in WeCom messages can be opened without re-logging in. 2024-10-22 17:02:59 +08:00
fit2bot
cc1fcd2b98 perf: move storage sdk to core (#14318)
* perf: move storage sdk to core

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: ibuler <ibuler@qq.com>
Co-authored-by: Bai <baijiangjie@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-10-22 15:20:10 +08:00
fit2bot
8434d8d5ba perf: update dependency (#14307)
* perf: update dependency

* perf: remove source build

* perf: Update Dockerfile with new base image tag

* perf: use cache build

* perf: Update Dockerfile with new base image tag

* fix: variable incorrectly defined

* perf: Update Dockerfile with new base image tag

* fix: openpyxl fixed version

* perf: Update Dockerfile with new base image tag

* perf: remove cache

* perf: Update Dockerfile with new base image tag

* perf: update pyproject.toml

* perf: Update Dockerfile with new base image tag

* perf: remove cache

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: 吴小白 <296015668@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-10-22 14:16:19 +08:00
feng
044fd238b8 perf: Remove ssh_key_change_strategy add value 2024-10-21 15:25:38 +08:00
feng
be096a1319 perf: List preference translate 2024-10-18 14:36:13 +08:00
吴小白
6fa14833b3 perf: use python embed 2024-10-18 11:02:49 +08:00
feng
1f32ab274c fix: Error subpub_msg log 2024-10-17 15:17:32 +08:00
Bryan
6720ecc6e0 Merge pull request #14319 from jumpserver/dev
v4.3.0
2024-10-17 14:55:38 +08:00
feng
b0f86e43a6 perf: Translate 2024-10-17 12:05:25 +08:00
ibuler
9b0c81333f perf: debug pub sub 2024-10-17 10:16:44 +08:00
Eric
05fc966444 perf: add koko i18n 2024-10-16 18:25:42 +08:00
Eric
b87650038f perf: update code 2024-10-16 18:11:00 +08:00
wangruidong
d4f69a7ff8 perf: Translate 2024-10-16 17:59:18 +08:00
ibuler
0e1e26c29c perf: disable f1 key 2024-10-16 17:01:10 +08:00
Huaqing Chen
1b8cdbc4dd 修复websocket不能使用Authorization Header的问题 2024-10-15 14:13:38 +08:00
feng
2a781c228f perf: Cas user cannot bind organization 2024-10-15 10:50:20 +08:00
ZhaoJiSen
35d6b0f16a Merge pull request #14299 from jumpserver/pr@dev@change_password_length
perf: Change secret remove redundant checks
2024-10-14 16:45:27 +08:00
feng
ca8987fef6 perf: Change secret remove redundant checks 2024-10-14 16:39:31 +08:00
ZhaoJiSen
b385133071 Merge pull request #14297 from jumpserver/pr@dev@translate
perf: Translate
2024-10-14 16:09:21 +08:00
feng
aa78a03efa perf: Translate 2024-10-14 16:05:38 +08:00
wangruidong
31f8a19392 perf: Translate account history 2024-10-14 15:31:17 +08:00
wangruidong
7a528b499a perf: import data validate platform 2024-10-14 14:05:24 +08:00
Eric
1c6ce422cf perf: update tinker v0.1.9 2024-10-12 16:30:28 +08:00
Eric
f9cf2ea2e5 perf: fix api error when deleting offline panda components 2024-10-12 16:15:23 +08:00
Aaron3S
575b3a617f feat: 添加 chen 翻译 2024-10-12 15:44:38 +08:00
wangruidong
b7362d3f51 fix: adhoc execute alert msg 2024-10-12 15:43:03 +08:00
ZhaoJiSen
6ee3860124 Merge pull request #14287 from jumpserver/pr@dev@translate
perf: Translate
2024-10-12 14:40:23 +08:00
feng
7e111da529 perf: Translate 2024-10-12 14:35:18 +08:00
wangruidong
578458f734 perf: site msg content optimize 2024-10-11 11:28:56 +08:00
Bai
bd56697d6d perf: DEFAULT_PAGE_SIZE same as MAX_LIMIT_PER_PAGE 2024-10-10 18:00:01 +08:00
wangruidong
aad824d127 perf: add created_by field 2024-10-09 16:14:22 +08:00
wangruidong
63f828da0b perf: Default endpoint cannot be disabled 2024-10-09 16:12:37 +08:00
wangruidong
7c211b3fb6 perf: Translate 2024-10-08 15:01:53 +08:00
feng
3881edd2ba perf: Optimize file audit download prompt 2024-09-29 16:12:49 +08:00
feng
b882b12d04 perf: Check the validity of the connection token 2024-09-27 17:10:08 +08:00
wangruidong
addd2e7d1c perf: Endpoint add is_active field 2024-09-27 16:00:05 +08:00
Bai
ad6d2e1cd7 fix: Fixed the issue that the workbench user login log only displays failed logs 2024-09-27 14:34:23 +08:00
github-actions[bot]
5f07271afa perf: Update Dockerfile with new base image tag 2024-09-27 14:30:48 +08:00
Bai
efdcd4c708 perf: upgrade geoip2 and .mmdb 2024-09-27 14:30:48 +08:00
jiangweidong
b62763bca3 perf: Cloud Sync IP Policy Updated to Preferred Option i18n 2024-09-27 14:29:09 +08:00
wangruidong
e95da730f2 perf: Koko can display assets custom name 2024-09-27 14:25:55 +08:00
fit2bot
43fa3f420a fix: Addressing the issue of unauthorized execution of system tools (#14209)
* fix: Addressing the issue of unauthorized execution of system tools

* perf: Optimization conditions

---------

Co-authored-by: jiangweidong <1053570670@qq.com>
2024-09-27 14:17:16 +08:00
wangruidong
0311446384 perf: playbook clone with file 2024-09-27 14:13:35 +08:00
feng
f7030e4fee perf: Login encryption key cache added 2024-09-26 15:11:35 +08:00
ZhaoJiSen
fce8cc375f Merge pull request #14230 from jumpserver/pr@dev@max_password_length
perf: The maximum length of the randomly generated password is changed to 36
2024-09-25 11:00:45 +08:00
feng
920199c6df perf: The maximum length of the randomly generated password is changed to 36 2024-09-25 10:52:16 +08:00
feng
d09eb3c4fa perf: Lock username is not case sensitive 2024-09-23 14:11:55 +08:00
ibuler
6e8affcdd6 perf: ops db migrate 2024-09-19 21:39:55 +08:00
老广
0b3a7bb020 Merge pull request #14203 from jumpserver/dev
merge: from dev to master
2024-09-19 19:37:19 +08:00
wangruidong
647736f4e3 fix: SAML2 500 error caused by duplicate email or username 2024-09-19 17:49:53 +08:00
ZhaoJiSen
cbc09d84df Merge pull request #14202 from jumpserver/pr@dev@password_rule
perf: Password rule import csv help_text
2024-09-19 16:54:52 +08:00
feng
4c957dd03b perf: Password rule import csv help_text 2024-09-19 16:51:43 +08:00
wangruidong
d34b65890f fix: import account failed 2024-09-19 15:12:05 +08:00
Bai
b53968ac00 delete: ansible log in logging.py 2024-09-19 15:11:31 +08:00
ZhaoJiSen
f2ccb15101 Merge pull request #14198 from jumpserver/pr@dev@saml
perf: Bind user group support str
2024-09-19 12:01:20 +08:00
feng
db5bf046fc perf: Bind user group support str 2024-09-19 11:58:45 +08:00
ibuler
59c87483e6 perf: filter gateway with new params 2024-09-19 11:33:02 +08:00
github-actions[bot]
26420b78f8 perf: Update Dockerfile with new base image tag 2024-09-19 11:18:04 +08:00
wangruidong
e47bdc093e perf: trigger core base image build 2024-09-19 11:18:04 +08:00
wangruidong
3dde80a60a fix: Password reset is only required for AUTH_BACKEND_MODEL 2024-09-19 11:08:11 +08:00
feng
e373a79d63 perf: Gateway type asset filter 2024-09-19 10:45:59 +08:00
wangruidong
744a5cd0e3 perf: Modify relative file path 2024-09-19 10:41:12 +08:00
wangruidong
37ca4a46ee perf: add clean_site_packages.sh file path to build-base-image.yml 2024-09-19 10:25:08 +08:00
wangruidong
0dc9214f98 fix: LDAP HA the login log did not record the authentication backend 2024-09-18 18:53:03 +08:00
wangruidong
513508654b fix: minio test failed 2024-09-18 18:51:25 +08:00
feng
ef2b12fa0f perf: Export template with prompts 2024-09-18 18:26:38 +08:00
feng
4e719ecacd perf: TimerExecution translate 2024-09-18 15:02:17 +08:00
ibuler
755a124b50 perf: checkout repo 2024-09-14 18:32:23 +08:00
zhaojisen
d6888776e7 perf: translate 2024-09-14 18:20:46 +08:00
wangruidong
29e233e715 perf: RemoteApp machine deployOption translate 2024-09-14 18:19:22 +08:00
wangruidong
99c3696d96 fix: Failed to import csv data 2024-09-14 18:17:15 +08:00
ibuler
ed6de83e8c perf: workflow push with full name 2024-09-14 18:09:30 +08:00
Eric
134f1a440c perf: replay part file download 2024-09-14 18:06:05 +08:00
ibuler
7da82242fe perf: github action workflow 2024-09-14 17:47:34 +08:00
Eric
2fd50d2425 perf: update compilemessages check ci 2024-09-14 17:38:07 +08:00
fit2bot
41a3e89248 chore: using pull pull request not push event (#14164)
* perf: diff with head not dev

* chore: using pull pull request not push event

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-09-14 17:21:49 +08:00
Bai
b125297c37 feat: GitHub Actions add compilemessages checked 2024-09-14 17:04:35 +08:00
ibuler
24255b69ee perf: diff with head not dev 2024-09-14 17:01:02 +08:00
ibuler
3bb51b39c4 perf: github action fetch branches 2024-09-14 16:51:25 +08:00
ibuler
b54da7d3b3 perf: workflow build base image 2024-09-14 16:42:06 +08:00
ibuler
534af0abf0 perf: build workflow 2024-09-14 16:32:15 +08:00
ibuler
8b0073333b perf: change git workflow 2024-09-14 16:25:06 +08:00
ZhaoJiSen
d8af2274f4 Merge pull request #14154 from jumpserver/pr@dev@koko_zh_translate
perf: KOKO zh translate
2024-09-14 15:34:27 +08:00
ibuler
3dd828d703 perf: workflow build base image 2024-09-14 15:34:20 +08:00
feng
fa6b4a5b63 perf: KOKO zh translate 2024-09-14 15:32:52 +08:00
ZhaoJiSen
8bd86c77f9 Merge pull request #14151 from jumpserver/pr@dev@win_rdp_ping
fix: Windows rdp ping fail
2024-09-14 14:48:17 +08:00
feng
3828e89cf8 fix: Windows rdp ping fail 2024-09-14 14:47:14 +08:00
wangruidong
e531b040ef fix: compilemessages error 2024-09-13 22:38:58 +08:00
wangruidong
3eee84a34e fix: delete ReplayStorage error 2024-09-13 19:09:21 +08:00
wangruidong
ab29df5991 fix: command search input error 2024-09-13 19:05:38 +08:00
wangruidong
b042f00688 fix: command search input error 2024-09-13 19:05:11 +08:00
github-actions[bot]
5beebaf51c perf: Update Dockerfile with new base image tag 2024-09-13 19:03:39 +08:00
wangruidong
50f075cc7e fix: Historical sessions download failed 2024-09-13 19:03:39 +08:00
Bai
e997236159 perf: Modify gunicorn log file rotate yesterday dir 2024-09-13 18:37:13 +08:00
ZhaoJiSen
c8b1d892e3 Merge pull request #14145 from jumpserver/pr@dev@account_already_exists
fix: Translate Account already exists
2024-09-13 18:33:25 +08:00
feng
9cb9e7328b fix: Translate Account already exists 2024-09-13 18:32:06 +08:00
feng
85129da942 perf: Postgresql add ssl mode 2024-09-13 17:49:14 +08:00
ZhaoJiSen
1cb00b1db4 Merge pull request #14138 from jumpserver/pr@dev@markdown_html
fix: Internal letter hyperlinks cannot be redirected
2024-09-13 11:07:08 +08:00
feng
c3798bfa95 fix: Internal letter hyperlinks cannot be redirected 2024-09-13 11:05:22 +08:00
github-actions[bot]
1d280599ae perf: Update Dockerfile with new base image tag 2024-09-12 18:55:01 +08:00
feng
ee8d7cdcac perf: Upgrade ansible postgresql 2024-09-12 18:55:01 +08:00
Aaron3S
1b4114fd5f perf: Optimize chen translation 2024-09-12 18:49:04 +08:00
Chenyang Shen
3c6c476f2e Merge pull request #14135 from jumpserver/pr@dev@feat_add_some_chen_i18n
feat: add chen i18n
2024-09-12 18:41:47 +08:00
Aaron3S
f19e3fedbd feat: add chen i18n 2024-09-12 18:38:16 +08:00
Bai
542e64278f perf: fix migrate adhoc playbook 2024-09-12 16:33:36 +08:00
wangruidong
cd76294e81 fix: migrate ops adhoc and playbook unique_together error 2024-09-12 16:33:36 +08:00
wangruidong
4f9158b2ad fix: ldap test config msg error 2024-09-12 10:41:17 +08:00
ZhaoJiSen
e319f20296 Merge pull request #14126 from jumpserver/pr@dev@third_party_user_login_failed
perf: Third-party user login failed
2024-09-12 10:23:05 +08:00
feng
b00f3a851c perf: Third-party user login failed 2024-09-12 10:19:40 +08:00
wangruidong
ab529fd22c fix: i18n compilemessages error 2024-09-12 10:07:12 +08:00
wangruidong
c2784c44ad feat: LDAP HA 2024-09-11 18:26:11 +08:00
feng
512e727ac6 feat: Postgresql support ssl 2024-09-11 18:12:25 +08:00
wangruidong
2dd0154967 perf: modify only_myself to only_mine 2024-09-11 18:02:35 +08:00
wangruidong
f55869a449 feat: Support playbook, adhoc share 2024-09-11 17:52:06 +08:00
wangruidong
b6f3c23787 perf: task description translate 2024-09-11 14:57:07 +08:00
github-actions[bot]
6982ab1efc perf: Update Dockerfile with new base image tag 2024-09-10 15:54:05 +08:00
wangruidong
db4d841bb0 perf: add xpack task description 2024-09-10 15:54:05 +08:00
wangruidong
ef91ebb468 perf: clean expired and account is null SyncInstanceTask record 2024-09-10 15:50:11 +08:00
fit2bot
6264319c51 perf: When connected through a gateway, you can use nc to forward data (#14110)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2024-09-09 19:00:48 +08:00
fit2bot
1417abecfb perf: Add task description (#14033)
Co-authored-by: ZhaoJiSen <97007455+ZhaoJiSen@users.noreply.github.com>
2024-09-09 18:54:33 +08:00
老广
bd548b3fe2 Revert "perf: update deps"
This reverts commit 76b6489636.
2024-09-09 15:33:57 +08:00
ZhaoJiSen
94cef9ea6e Merge pull request #14106 from jumpserver/pr@dev@translate
perf: Translate
2024-09-09 14:29:04 +08:00
feng626
a338613b5a Merge branch 'dev' into pr@dev@translate 2024-09-09 14:27:38 +08:00
feng
0d833a966c perf: Translate 2024-09-09 14:15:16 +08:00
ibuler
76b6489636 perf: update deps 2024-09-09 11:39:51 +08:00
fit2bot
763fe778d5 perf: finish this feat (#14079)
* perf: basic finished

* perf: finish this feat

* perf: add datetime demo

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-09-09 11:26:24 +08:00
ibuler
cf1dc79c68 perf: applet host tips 2024-09-09 10:25:01 +08:00
ibuler
7973239424 perf: support change gateway platform 2024-09-06 17:35:57 +08:00
feng
1baacd0b2c perf: Disable delete admin user 2024-09-06 15:37:12 +08:00
feng
054d385ffc perf: Acl action add notify and warn 2024-09-06 11:07:30 +08:00
wangruidong
50d3a4906a feat: Add announcement start and end dates 2024-09-06 10:54:27 +08:00
wangruidong
c8b7008d42 perf: Translate 2024-09-06 10:54:12 +08:00
kebyn
e94520a3fd fix: 修复非标准实现 X-Forwarded-For 时的问题 2024-09-06 10:31:58 +08:00
wangruidong
55e8e34226 fix: 500 error caused by duplicate email or username 2024-09-06 10:22:37 +08:00
wangruidong
8755ece633 perf: Translate 2024-09-05 19:24:19 +08:00
feng
c545e2a3aa perf: Support SAML2, OIDC user authentication services, mapping user group field information 2024-09-04 18:42:47 +08:00
wangruidong
1068662ab1 perf: Optimize asset connection speed with es command storage 2024-09-02 13:52:23 +08:00
ZhaoJiSen
75141741a1 Merge pull request #14062 from jumpserver/pr@dev@translate
perf: Translate
2024-08-30 15:18:45 +08:00
feng
9da507bb62 perf: Translate 2024-08-30 15:16:44 +08:00
fit2bot
160293365a perf: Regularly delete useless password change push records (#14026)
* perf: If the user Home page does not exist, push will fail

* perf: Change secret add uid parameter

* perf: Regularly delete useless password change push records

---------

Co-authored-by: feng <1304903146@qq.com>
2024-08-30 15:01:40 +08:00
wangruidong
7a19007aba perf: ldap import user error msg 2024-08-30 14:55:22 +08:00
ibuler
f866b93f96 perf: refresh oracle ports if need 2024-08-29 19:06:55 +08:00
feng
b9e64747ac perf: View the internal message and convert the content into markdown 2024-08-29 17:28:12 +08:00
fit2bot
25a473dc99 chore: update checkout action 2024-08-29 17:22:25 +08:00
Bai
e3bf015aa9 fix: user role can't open page of password & ssh key 2024-08-29 14:44:36 +08:00
Bryan
6d3d4a08af Update README.md (#14043)
* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md

* Update README.md
2024-08-28 17:55:56 +08:00
Bai
9554de4ea6 fix: User check password need reset 2024-08-28 15:08:24 +08:00
ZhaoJiSen
6157ff7b7d Merge pull request #14032 from jumpserver/pr@dev@koko_translate
perf: Koko translate
2024-08-27 17:41:30 +08:00
feng
774fd176fd perf: Koko translate 2024-08-27 17:39:37 +08:00
ibuler
b489db8054 perf: add a script activate user manually 2024-08-21 14:55:57 +08:00
ZhaoJiSen
6b9fa6e01f Merge pull request #14010 from jumpserver/pr@dev@view_asset
perf: View asset mini api add domain platform field
2024-08-21 11:34:20 +08:00
ZhaoJiSen
9b59954393 Merge pull request #14011 from jumpserver/pr@dev@test_asset
perf: No permission to test asset connectivity
2024-08-21 11:33:55 +08:00
feng
ecaf19563f perf: No permission to test asset connectivity 2024-08-21 11:28:39 +08:00
feng
c431e96eaf perf: View asset mini api add domain platform field 2024-08-21 10:35:07 +08:00
ZhaoJiSen
d86f241450 Merge pull request #14005 from jumpserver/pr@dev@translate
perf: Translate
2024-08-20 11:30:37 +08:00
feng
3252db31fe perf: Translate 2024-08-20 11:28:30 +08:00
Bai
dac118dd26 perf: delete organization message 2024-08-19 16:06:37 +08:00
fit2bot
181eb621c0 perf: Remove kubernetes tree api (#13995)
* perf: Remove kubernetes tree api

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-08-19 16:04:00 +08:00
ibuler
828582333d perf: remove ansible receptcel 2024-08-19 11:16:58 +08:00
github-actions[bot]
657f7f822b perf: Update Dockerfile with new base image tag 2024-08-19 10:50:39 +08:00
ibuler
93627e4f9d perf: clean site packages 2024-08-19 10:50:39 +08:00
feng
2adb2519fa perf: Push password change and select finally use rdp to test connectivity. rdp does not support gateway 2024-08-19 10:20:33 +08:00
Bryan
56373e362b Merge pull request #13988 from jumpserver/dev
v4.1.0
2024-08-16 18:40:35 +08:00
wangruidong
32ec48ac14 perf: Improve performance by optimizing ES index creation 2024-08-16 18:19:04 +08:00
Bai
b3a0d81740 fix: job periodic task double run 2024-08-15 20:17:20 +08:00
ibuler
2b160fbbc2 revert: entrypoint.sh 2024-08-15 20:14:24 +08:00
wangruidong
60fcf5fcd3 perf: luna connect asset name set custom value 2024-08-15 19:47:56 +08:00
Bai
7c2e50435d perf: i18n for ldap user import 2024-08-15 15:50:56 +08:00
ZhaoJiSen
57f91d0973 Merge pull request #13980 from jumpserver/pr@dev@no_account_found
perf: Lina translate
2024-08-15 14:49:41 +08:00
feng
49c033e003 perf: Lina translate 2024-08-15 14:47:55 +08:00
Ewall555
6476a8fee8 perf: Translate ticket cancel button 2024-08-15 14:35:43 +08:00
wangruidong
c10db2ab0f perf: LDAP import user Translate 2024-08-15 14:35:06 +08:00
wangruidong
647beffc01 fix: no accounts no send msg 2024-08-14 19:25:11 +08:00
feng
ac0c6ef3d5 perf: Storage update comment failed 2024-08-14 19:18:10 +08:00
feng
e13741827d fix: Domain detail asset amount mistake 2024-08-14 17:37:03 +08:00
wangruidong
29caf0154e perf: Translate batch approval 2024-08-14 17:36:23 +08:00
wangruidong
fbdcc437e6 perf: ticket msg field value set truncate string length 2024-08-14 16:45:43 +08:00
feng
b38e5df1aa perf: Translate 2024-08-14 16:37:57 +08:00
feng
0a39ba0a75 fix: Use only_sudo failed 2024-08-14 16:15:57 +08:00
wangruidong
c56e1bdbbe fix: call get_verify_state_failed_response NotImplementedError 2024-08-13 18:51:15 +08:00
feng
6b00ba271f perf: Replace Feishu to obtain user information interface 2024-08-13 18:13:08 +08:00
wangruidong
bddb1de2f8 perf: Comment translate 2024-08-13 18:04:29 +08:00
wangruidong
32ae77c42d perf: add TERMINAL_SSH_KEY_LIMIT_COUNT conf 2024-08-13 17:39:03 +08:00
feng
3b1701b1aa perf: Translate 2024-08-12 18:41:05 +08:00
feng
3b9bcc719e perf: Reset password: optimize form frame 2024-08-12 15:16:06 +08:00
feng
8e6aa4524d perf: Ip type translate 2024-08-09 17:10:11 +08:00
feng
cea63e6083 perf: Setting user attributes is invalid 2024-08-09 16:53:13 +08:00
feng
5d2d8ca487 perf: Translate 2024-08-08 19:17:34 +08:00
fit2bot
81146f44f7 perf: set default version 2024-08-08 17:54:43 +08:00
fit2bot
9adaa27f6c perf: Luna login expire message (#13917)
* perf: Luna login expire message

* perf: Login timeout open in a new window

---------

Co-authored-by: feng <1304903146@qq.com>
2024-08-08 17:54:02 +08:00
feng
01c565f93f perf: Activity log no display 2024-08-08 16:39:44 +08:00
fit2bot
cb97afffab chore: remove build test 2024-08-08 16:06:51 +08:00
github-actions[bot]
1b55bf1670 perf: Update Dockerfile with new base image tag 2024-08-08 16:06:28 +08:00
fit2bot
b1c68165bb perf: update check version to v1.0.3 2024-08-08 16:06:28 +08:00
wangruidong
5d3e633e83 perf: ldap import msg modify 2024-08-07 19:12:42 +08:00
Eric
c863bf63b1 perf: update lina i18n 2024-08-07 17:45:55 +08:00
wangruidong
c71a6ae4ba fix: ssh_key search failed 2024-08-07 17:04:38 +08:00
wangruidong
38e3d9de8b feat: Allow users to customize asset name and comment 2024-08-07 16:44:01 +08:00
Eric
0c73acd4b9 perf: support only su or sudo 2024-08-07 10:57:09 +08:00
wangruidong
581a5c73a6 perf: object storage builtin comment i18n 2024-08-06 10:44:15 +08:00
feng
e1ed1d7c4c perf: Reset password remove sensitive data 2024-08-05 18:25:11 +08:00
Eric
805e7d1d5f perf: Check whether the applet is available. 2024-08-05 18:18:54 +08:00
feng
1957c2983b perf: Ticket set serial number add lock 2024-08-05 17:53:43 +08:00
Bai
6b1ceae6c5 perf: delete blank line 2024-08-05 16:29:54 +08:00
wangruidong
2a5c41dfaf feat: support configuring multiple SSH keys for users 2024-08-05 15:22:54 +08:00
wangruidong
7a38c9136e feat: Allow users to customize asset name and comment 2024-08-05 14:50:24 +08:00
ZhaoJiSen
9a3fdf76fc Merge pull request #13876 from jumpserver/pr@dev@translate
perf: Translate
2024-08-05 14:33:41 +08:00
feng
136db61011 perf: Translate 2024-08-05 14:31:08 +08:00
ibuler
0d338f80c5 perf: ee dockerfile 2024-08-05 14:23:32 +08:00
feng
bd3909ad27 perf: Third-party user login settings default organization 2024-08-02 15:52:05 +08:00
Eric
96399f8315 perf: update tinker v0.1.7 2024-08-02 14:10:03 +08:00
ibuler
4e90d17484 perf: poetry mirror 2024-08-01 18:18:08 +08:00
ibuler
13de75c41f perf: docker file poetry mirror 2024-08-01 17:37:15 +08:00
ibuler
a77ebc5fee perf: pkg download
perf: resource download

perf: resource download
2024-08-01 16:15:36 +08:00
ibuler
99ce82a6a0 perf: build 2024-08-01 16:15:16 +08:00
wangruidong
ec95d25704 perf: Remove applets, no longer display remote application connection methods 2024-08-01 15:59:00 +08:00
Eric
7c6e83d124 perf: reformat code 2024-07-31 15:09:53 +08:00
ibuler
ad5e88f1e3 perf: display migrate log 2024-07-31 15:09:33 +08:00
wangruidong
b1e958d806 fix: stop job failed 2024-07-30 18:53:16 +08:00
feng
8506ae9edd perf: When account push change secret windows only modify the type equal to password 2024-07-30 18:33:42 +08:00
wangruidong
ceb2a9bb17 fix: Arbitrary File Read in Ansible Play 2024-07-30 18:19:01 +08:00
feng
8d83c953d3 perf: Support WeCom DingTalk FeiShu Lark Slack attribute mapping 2024-07-30 17:48:26 +08:00
Eric
9825f9fbd2 perf: Check if CORE_HOST should ignore SSL 2024-07-30 16:57:04 +08:00
feng
41b2ce06a8 perf: Approval process role selection supports multiple strategies 2024-07-30 16:06:01 +08:00
feng
920cfdac5c perf: Saml2 callback url miss port 2024-07-26 18:17:40 +08:00
Bai
8abf7876cc perf: graceful restart gunicorn worker timeout 30 2024-07-26 14:05:27 +08:00
wangruidong
2e625f2c33 feat: add assets amount field to platform page 2024-07-26 13:45:05 +08:00
halo
88037b2038 perf: Email service authentication username is optional 2024-07-26 11:23:15 +08:00
Bai
457021040a perf: Modifying the label matching logic of an AppletHost (random) 2024-07-25 19:04:57 +08:00
fit2bot
4887b21d35 fix: message publish_task args,kwargs can json encode (#13797)
* fix: message publish_task args,kwargs can json encode

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: wangruidong <940853815@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-07-24 15:45:27 +08:00
fit2bot
03a66fd563 perf: Modify error message for desktop client login (#13763)
* perf: Modify error message for desktop client login

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: wangruidong <940853815@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-07-24 10:59:54 +08:00
fit2bot
ef656a8dfd perf: change docker file build (#13761)
* perf: change docker file build

* perf: Update Dockerfile with new base image tag

---------

Co-authored-by: ibuler <ibuler@qq.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-07-23 16:38:00 +08:00
Eric
5e45129e32 perf: add luna i18n 2024-07-23 15:40:32 +08:00
feng
ea64b01da6 perf: You can modify sudo permissions multiple times 2024-07-22 17:27:20 +08:00
feng
c3b863c2be perf: You can modify sudo permissions multiple times 2024-07-22 17:27:20 +08:00
feng
6a7896b712 perf: Gpt3 to gpt-4o-mini 2024-07-19 11:56:07 +08:00
feng
83c1f8e4d3 perf: The gateway password contains ! Password parsing failed 2024-07-19 10:41:54 +08:00
Bai
9d3fdd37a3 perf: user authentication supports configuration redirection 2024-07-19 10:37:52 +08:00
Bai
419195895e perf: update readme 2024-07-18 19:43:38 +08:00
feng
c92188887d perf: Create authorization to add template account Push account parameters 2024-07-18 19:15:46 +08:00
feng
dcfc4e6e7b perf: The locked IP shows the username + translate 2024-07-17 18:10:22 +08:00
feng
836adab5d0 perf: Feishu lark support attributes settings 2024-07-17 16:59:57 +08:00
wangruidong
e93227a53c fix: The asset cannot be obtained during online synchronization 2024-07-17 15:52:40 +08:00
fit2bot
d6f6bb9c1b fix: session viewset api permission validation (#13750)
* fix: session viewset api permission validation

* fix: some api permission validation

---------

Co-authored-by: Bai <baijiangjie@gmail.com>
2024-07-17 15:35:34 +08:00
feng
85825165fc perf: Translate 2024-07-17 11:37:19 +08:00
fit2bot
66047c7926 perf: Migrate (#13741)
Co-authored-by: feng <1304903146@qq.com>
2024-07-17 10:18:53 +08:00
Bai
456bcd2d3f fix: i18n error 2024-07-17 10:01:21 +08:00
Bai
259f68a806 fix: i18n error 2024-07-17 09:54:47 +08:00
feng
4e6231ab19 perf: Notification remove kael magnus 2024-07-16 19:34:18 +08:00
fit2bot
d7bbfdcce6 perf: Translate (#13731)
Co-authored-by: feng <1304903146@qq.com>
2024-07-16 18:38:47 +08:00
吴小白
a0cc9e5db5 fix: deploy applet host 2024-07-16 12:49:33 +08:00
wangruidong
ea6cd853de perf: 社区版移除magnus 2024-07-16 10:40:33 +08:00
fit2bot
53a388a7e0 fix: View user perms bug (#13721)
Co-authored-by: feng <1304903146@qq.com>
2024-07-15 17:50:37 +08:00
fit2bot
13b1938efb perf: Community supports custom platforms (#13719)
Co-authored-by: feng <1304903146@qq.com>
2024-07-15 17:31:44 +08:00
ibuler
6677985e4a perf: support user email login 2024-07-15 16:23:52 +08:00
ibuler
cfa1034161 perf: community add postgre support 2024-07-15 16:19:24 +08:00
ibuler
815973fb63 perf: split user model to many file 2024-07-15 10:54:17 +08:00
吴小白
92d369aaca perf: remove receptor 2024-07-12 18:38:26 +08:00
jiangweidong
281a2d9679 fix: custom sms send success but prompt fails 2024-07-12 18:37:46 +08:00
feng
e9f4615caa perf: Optimize the password reset page experience for new users (the password field will be lengthened) 2024-07-12 15:17:49 +08:00
jiangweidong
c0d2efa72a perf: async sms task params can json 2024-07-12 15:16:41 +08:00
gerry-fit
247f4d5c19 perf: Enterprise Edition Hide Footer Copyright Content 2024-07-11 16:10:42 +08:00
fit2bot
29c29b17d4 perf: Translate (#13686)
Co-authored-by: feng <1304903146@qq.com>
2024-07-10 19:03:19 +08:00
wangruidong
5608f7d20d fix: 定时清理任务不生效问题 2024-07-10 16:13:47 +08:00
Bai
aa8ae36255 perf: README 2024-07-10 14:55:46 +08:00
feng
2292e6f2eb perf: save_passwd_change filter user source local and passwords not emtpy 2024-07-10 14:20:33 +08:00
fit2bot
bf82a1c721 fix: Operator write failed (#13677)
Co-authored-by: feng <1304903146@qq.com>
2024-07-10 11:24:26 +08:00
Bryan
8ef84bbc03 Update README.md 2024-07-10 11:13:42 +08:00
fit2bot
e36d51cc0b perf: country code api (#13672)
* perf: remove notification migrations

* perf: country code api

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-07-09 19:23:41 +08:00
feng
5c1d0238e1 39.102.214.101 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOzDdXgVjgKrT+ZF5DXcNZqJnkjwvt0M5FbVpvbTOU/v
perf: save_passwd_change filter user source local and passwords not emtpy
2024-07-09 19:08:22 +08:00
wangruidong
c6befe4c4b fix: creat linux asset protocol default value is sftp 2024-07-09 19:04:19 +08:00
Bai
5a57c296a1 feat: add db table data analyzer util 2024-07-09 18:49:51 +08:00
wangruidong
34ddfd24be fix: import role template csv failed 2024-07-09 18:15:44 +08:00
wangruidong
39051ef0fd fix: import role template csv failed 2024-07-09 17:04:59 +08:00
fit2bot
ddd813241c perf: JobExecutionViewSet add SECURITY_COMMAND_EXECUTION permission (#13662)
Co-authored-by: feng <1304903146@qq.com>
2024-07-09 16:34:15 +08:00
mmagi
60f7cbef9a fix: 主机硬件信息硬盘大小避免多次挂载重复计入 2024-07-09 15:52:15 +08:00
wangruidong
4adc981a21 perf: update date_updated when update user roles 2024-07-09 15:51:15 +08:00
mmagi
c42913c15e fix: win主机硬件信息内存单位与其他主机一致;cpu信息字段与其他主机一致 2024-07-09 15:49:35 +08:00
halo
bb6d60b46d perf: 优化创建子节点时锁置后 2024-07-09 15:15:06 +08:00
fit2bot
afe7f03c16 perf: login style change (#13539)
* perf: login style change

* perf: login style change

* perf: login style change

---------

Co-authored-by: zhaojisen <1301338853@qq.com>
2024-07-09 15:02:37 +08:00
fit2bot
ba8d3be9a6 fix: Operatelog plaintext storage AKSK (#13506)
* fix: Operatelog plaintext storage AKSK

* perf: Encrypt some field when saving operatelog

* fix: Operatelog plaintext storage AKSK

---------

Co-authored-by: jiangweidong <1053570670@qq.com>
2024-07-09 14:52:00 +08:00
Eric
d14d8869ac perf: add connection options for mongodb 2024-07-09 14:00:59 +08:00
wangruidong
2f7391efc3 perf: modify migrations 2024-07-09 11:38:47 +08:00
ibuler
75fa96b29c perf: remove notification migrations 2024-07-09 11:25:49 +08:00
maninhill
c56ab9bc1e chore: Update README.zh-CN.md 2024-07-09 11:11:20 +08:00
fit2bot
443e492fd4 perf: Asset type cloud add community version (#13640)
Co-authored-by: feng <1304903146@qq.com>
2024-07-09 10:59:56 +08:00
ibuler
b8c223d525 perf: can set xpack disable force 2024-07-09 10:56:20 +08:00
吴小白
a509afe24b fix: FromAsCasing keywords 2024-07-09 10:35:59 +08:00
fit2bot
9654add528 perf: Translate (#13633)
Co-authored-by: feng <1304903146@qq.com>
2024-07-08 15:43:56 +08:00
Bryan
d0a9409078 Update README.md 2024-07-08 14:51:07 +08:00
fit2bot
5836583490 fix: The account gather results do not have the last login time (#13625)
Co-authored-by: feng <1304903146@qq.com>
2024-07-08 11:42:24 +08:00
fit2bot
57d689bee6 perf: Translate (#13620)
Co-authored-by: feng <1304903146@qq.com>
2024-07-05 18:09:39 +08:00
ZhaoJiSen
8a3fb6bd4d Merge pull request #13616 from jumpserver/pr@dev@translate
perf: Translate
2024-07-05 16:50:00 +08:00
feng
78bd3f581a perf: Translate 2024-07-05 16:36:55 +08:00
fit2bot
d07c476507 perf: Translate (#13612)
Co-authored-by: feng <1304903146@qq.com>
2024-07-04 18:14:34 +08:00
fit2bot
50d196eda4 perf: Job api add filter options (#13610)
Co-authored-by: feng <1304903146@qq.com>
2024-07-04 16:03:51 +08:00
ibuler
823d9af91d perf: upgrade to v4, more international and more standardized. 2024-07-04 10:06:43 +08:00
Bryan
3731123369 Update README.md 2024-07-04 09:47:56 +08:00
Bryan
1a68c4b44a Update README.md 2024-07-04 09:47:56 +08:00
Bryan
0f79006b59 Update README.md 2024-07-04 09:47:56 +08:00
maninhill
c95ad5a31c chore: Update README.md 2024-07-04 09:44:01 +08:00
maninhill
e25a96d359 chore: Update README.md 2024-07-03 22:56:08 +08:00
maninhill
04284adc87 chore: Update README.md 2024-07-03 22:40:32 +08:00
Bryan
02fc045370 Merge pull request #13600 from jumpserver/dev
v4.0.0
2024-07-03 19:04:35 +08:00
maninhill
7ee7d50f22 chore: Update README.md 2024-07-03 18:54:56 +08:00
fit2bot
3d015398c3 perf: Luna translate (#13599)
Co-authored-by: feng <1304903146@qq.com>
2024-07-03 17:50:55 +08:00
wangruidong
da8b328f80 fix: bulk delete playbook 500 error 2024-07-03 17:15:50 +08:00
fit2bot
82a6702c90 perf: Translate (#13594)
Co-authored-by: feng <1304903146@qq.com>
2024-07-03 16:50:09 +08:00
fit2bot
ad267bcd35 perf: Translate (#13593)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-07-03 16:42:02 +08:00
maninhill
15dc922bca chore: Update README.md 2024-07-03 16:10:03 +08:00
Aaron3S
22405d46d6 feat: add chen translate 2024-07-03 15:54:19 +08:00
wangruidong
35b0741068 fix: modify render_to_json rbac 2024-07-03 15:53:25 +08:00
刘瑞斌
d7b8174fd0 chore: use unseq list 2024-07-03 15:35:14 +08:00
ibuler
43cfb11bca perf: tag export format use name:value style 2024-07-03 15:34:53 +08:00
wangruidong
f955cebaa0 perf: Translate 2024-07-03 15:17:10 +08:00
fit2bot
5d7ec054e6 perf: Community limit (#13584)
Co-authored-by: feng <1304903146@qq.com>
2024-07-03 15:01:37 +08:00
Bryan
6088a38eed Update README.md 2024-07-03 14:51:51 +08:00
fit2bot
e1a84e76bb perf: some translation (#13585)
* perf: applet host platform

* perf: some translation

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-07-03 14:51:21 +08:00
wangruidong
19f9179e7f perf: update migrations same with v3 2024-07-03 14:46:17 +08:00
Bryan
aa4a8d5b42 Update README.md 2024-07-03 14:44:28 +08:00
老广
10ba31086c Update README.md 2024-07-03 14:40:49 +08:00
fit2bot
fa8312bc65 perf: Translate (#13575)
Co-authored-by: feng <1304903146@qq.com>
2024-07-02 18:30:23 +08:00
maninhill
512e727dd4 chore: Update CONTRIBUTING.md 2024-07-02 18:25:57 +08:00
wangruidong
a529609275 fix: Resolve issue with update permissions preventing data import 2024-07-02 16:34:10 +08:00
fit2bot
a8973330fe fix: Account tempale cannot push params (#13571)
Co-authored-by: feng <1304903146@qq.com>
2024-07-02 16:12:27 +08:00
ibuler
d42acc3848 perf: applet host platform 2024-07-02 15:15:13 +08:00
fit2bot
912cefbc85 perf: Lina LoginLogTotal translate (#13569)
Co-authored-by: feng <1304903146@qq.com>
2024-07-02 15:10:33 +08:00
feng
2bb475d0ce perf: Account push log optimization 2024-07-02 14:55:38 +08:00
ibuler
22788ff2da perf: remove org api scope 2024-07-02 14:11:16 +08:00
fit2bot
5594b25ae0 perf: Login confirm return failed (#13560)
Co-authored-by: feng <1304903146@qq.com>
2024-07-02 11:02:30 +08:00
Aaron3S
4733d89807 perf: 优化 chen 翻译 2024-07-02 10:19:36 +08:00
wangruidong
c718fe1a9d perf: modify user login ACL msg 2024-07-01 19:30:42 +08:00
wangruidong
237b4a82c9 fix: handle 500 error when re-binding DingTalk user to another user 2024-07-01 18:03:47 +08:00
fit2bot
76e0cbb8ac perf: update lion i18n (#13556)
* perf: update lion i18n

* perf: update i18n

---------

Co-authored-by: Eric <xplzv@126.com>
2024-07-01 16:22:46 +08:00
fit2bot
b3a670d380 perf: Lina mfa translate (#13555)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-07-01 16:12:13 +08:00
wangruidong
db243d050e fix: playbook FileNotFoundError 2024-07-01 15:51:14 +08:00
wangruidong
cd2648291e perf: Translate 2024-07-01 15:15:53 +08:00
wangruidong
4a49bde1f0 perf: add compatibility for macOS environment 2024-07-01 15:02:32 +08:00
wangruidong
d9754496d0 perf: add bubblewrap 2024-07-01 15:02:32 +08:00
fit2bot
6753b5fd19 perf: Translate (#13550)
Co-authored-by: feng <1304903146@qq.com>
2024-07-01 11:42:33 +08:00
fit2bot
aeb320ba30 perf: Lina translate (#13548)
Co-authored-by: feng <1304903146@qq.com>
2024-07-01 10:15:06 +08:00
ibuler
e712e8ccfc perf: ansible version and set user lang 2024-06-28 18:59:44 +08:00
fit2bot
1d6f827296 perf: Migrate (#13540)
Co-authored-by: feng <1304903146@qq.com>
2024-06-28 18:36:24 +08:00
ibuler
772c9b385c perf: lang setting from core 2024-06-28 16:40:25 +08:00
wangruidong
f5053728e7 perf: Translate Tags 2024-06-28 15:28:57 +08:00
wangruidong
f67fd29499 perf: Community update user list API to exclude specific fields 2024-06-28 14:54:07 +08:00
fit2bot
138ea35620 fix: Got perm tree 500 (#13533)
Co-authored-by: feng <1304903146@qq.com>
2024-06-28 11:39:09 +08:00
wangruidong
bf56549f01 perf: Task log optimize 2024-06-28 10:25:10 +08:00
Eric
908181af64 perf: clean mp4 replay file
perf: refactor code to clean files
2024-06-27 18:12:37 +08:00
fit2bot
7b4d3c44f8 fix: Asset perm calculate failed (#13530)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-06-27 18:05:08 +08:00
feng
b7a6454d65 fix: Asset perm calculate failed 2024-06-27 17:56:41 +08:00
ibuler
6d81fa7fdf perf: change default login title 2024-06-27 17:55:57 +08:00
wangruidong
0e8833cce3 perf: Translate Client connection 2024-06-27 11:27:43 +08:00
fit2bot
24d9e65532 fix: Asset 003 migrate failed (#13519)
Co-authored-by: feng <1304903146@qq.com>
2024-06-26 21:42:43 +08:00
ibuler
bca9bdf619 perf: translate some word 2024-06-26 19:29:56 +08:00
fit2bot
cd39e20808 perf: Applet host provider add filterset (#13517)
Co-authored-by: feng <1304903146@qq.com>
2024-06-26 19:07:28 +08:00
fit2bot
9c8680d3f4 perf: Translate (#13514)
Co-authored-by: feng <1304903146@qq.com>
2024-06-26 17:06:23 +08:00
wangruidong
dd84ca8f85 fix: Virtualapp rbac config 2024-06-26 16:43:32 +08:00
Eric
96c1f689c0 perf: modify dbeave remoteapp dislay name 2024-06-26 16:19:09 +08:00
wangruidong
84855bfd7e perf: Translate Lark 2024-06-26 16:13:16 +08:00
fit2bot
40c5a218a9 perf: Translate (#13509)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-06-26 15:18:37 +08:00
wangruidong
8e87972a76 perf: Translate ticket action 2024-06-26 14:37:32 +08:00
fit2bot
3faee9b80c perf: change some translate (#13505)
* perf: some word translate


---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-06-25 19:36:35 +08:00
fit2bot
5a1389a187 perf: Translate (#13504)
Co-authored-by: feng <1304903146@qq.com>
2024-06-25 19:10:32 +08:00
Eric
565c2f493c perf: add lion i18n 2024-06-25 19:04:40 +08:00
Bai
8d48593fc4 perf: Update README 2024-06-25 16:44:00 +08:00
fit2bot
b50c96fcd6 perf: Update README (#13497)
* perf: Update README

* perf: Update README

* perf: Update README

---------

Co-authored-by: Bai <baijiangjie@gmail.com>
2024-06-25 16:29:14 +08:00
ibuler
85700a2a26 perf: some word translate 2024-06-25 15:36:25 +08:00
Bryan
66615b7dd3 Update README.md 2024-06-25 15:34:31 +08:00
Bryan
2c1a1fa31e Update README.md 2024-06-25 15:34:31 +08:00
wangruidong
bbc442b56e perf: Translate CanDragSelect tips 2024-06-25 15:31:30 +08:00
Bryan
1ca579f4f0 Update README.md 2024-06-25 15:01:47 +08:00
Bryan
9e3b23179c Update README.md 2024-06-25 15:01:47 +08:00
Bryan
9fd861d047 Update README.md 2024-06-25 15:01:47 +08:00
fit2bot
4abfcb27d1 perf: Update README (#13491)
* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

---------

Co-authored-by: Bai <baijiangjie@gmail.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2024-06-25 11:22:38 +08:00
老广
3463761693 Update README.md 2024-06-25 10:28:14 +08:00
Eric
c311adc1da chore: update mysqlclient 2.2.4 2024-06-24 20:12:09 +08:00
ibuler
ee258707c8 perf: change initial passwd to ChangeMe 2024-06-24 20:11:49 +08:00
Eric
17d96669fe perf: remove pymysql 2024-06-24 20:11:23 +08:00
fit2bot
3fade107d5 perf: Translate (#13489)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-06-24 20:10:34 +08:00
wangruidong
f91ec6fa6a perf: favor & disfavor trans 2024-06-24 19:38:19 +08:00
Bai
dfff41e9d6 perf: Update README 2024-06-24 19:25:41 +08:00
Bai
478e81b8fa perf: Update README 2024-06-24 19:25:41 +08:00
wangruidong
9b14f2aa1f perf: ftp log has_file trans 2024-06-24 19:18:26 +08:00
Bryan
18e648af6e Update README.md (#13481)
* Update README.md

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README

* perf: Update README
2024-06-24 19:16:30 +08:00
老广
45bd69585a Update README.md 2024-06-24 18:24:21 +08:00
maninhill
42a0cde450 chore: Update README.md 2024-06-24 18:22:38 +08:00
Bai
a9ef21ea3f fix: poetry lock 2024-06-24 17:07:34 +08:00
Bai
13d24a12db fix: i18n messages 2024-06-24 17:07:34 +08:00
wangruidong
2bd09f246d fix: raise http 400 when batch delete in component settings 2024-06-24 16:25:54 +08:00
fit2bot
23c81cf5eb perf: Migrate asset dameng json (#13477)
Co-authored-by: feng <1304903146@qq.com>
2024-06-24 16:24:40 +08:00
Bryan
e95284335e Merge pull request #13472 from jumpserver/v4
Merge v4 to dev
2024-06-24 15:50:29 +08:00
Bai
1c7f82e65a Merge v4 to dev (Update poetry lock) 2024-06-24 15:47:13 +08:00
Bai
dfde50c768 Merge v4 to dev 2024-06-24 15:43:40 +08:00
ibuler
8bfbebf29e Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-24 14:51:42 +08:00
ibuler
8157f9891f perf: 优化批量删除判断 2024-06-24 14:50:53 +08:00
wangruidong
ad95adc833 perf: trans LDAP msg 2024-06-24 14:24:06 +08:00
ibuler
f7e55c9b89 merge: with remote 2024-06-24 11:06:32 +08:00
ibuler
11b125655d perf: passkey help msg 2024-06-24 11:05:41 +08:00
fit2bot
c6628a1959 perf: Translate (#13471)
Co-authored-by: feng <1304903146@qq.com>
2024-06-24 10:57:10 +08:00
fit2bot
165d030c8e perf: ansible runner in isolated mode (#13434)
perf: use new ansible runner

perf: change lock

Co-authored-by: ibuler <ibuler@qq.com>
2024-06-24 10:21:31 +08:00
feng
9be77cf58f perf: Ansible inventory set jms 2024-06-24 10:15:05 +08:00
吴小白
887724bad4 feat: upgrade poetry.lock 2024-06-24 10:11:49 +08:00
fit2bot
ae7dbbedcc perf: Edit rbac perms (#13468)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-06-21 19:08:37 +08:00
fit2bot
407a77f61b perf: trans StopLogOutput 2024-06-21 18:05:39 +08:00
fit2bot
e06f9a03d6 perf: System setting perm (#13463)
Co-authored-by: feng <1304903146@qq.com>
2024-06-20 19:19:14 +08:00
fit2bot
07edbea54e perf: Update ah translate (#13459)
Co-authored-by: feng <1304903146@qq.com>
2024-06-20 16:56:41 +08:00
ibuler
856e501a15 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-20 11:11:19 +08:00
ibuler
8cf900f9de perf: 生产授权树 2024-06-20 11:10:57 +08:00
fit2bot
a54605ac79 perf: Translate (#13454)
Co-authored-by: feng <1304903146@qq.com>
2024-06-19 19:36:47 +08:00
Bryan
e4ac73896f Merge pull request #13452 from jumpserver/dev
v3.10.11-lts
2024-06-19 16:01:26 +08:00
Bai
b283d88781 fix: Clone asset with accounts 2024-06-19 16:00:58 +08:00
wangruidong
92790d711e perf: Add log download button 2024-06-19 15:56:02 +08:00
gerry-fit
2977323800 perf: 登录重置密码传输进行加密 2024-06-19 14:53:50 +08:00
fit2bot
5b548d8d57 perf: Translate (#13450)
Co-authored-by: feng <1304903146@qq.com>
2024-06-19 14:48:48 +08:00
wangruidong
4a520e9e10 fix: 全局组织,添加标签报错 2024-06-19 09:27:03 +08:00
fit2bot
afdf777386 perf: Translate account (#13445)
Co-authored-by: feng <1304903146@qq.com>
2024-06-18 19:39:27 +08:00
ibuler
cd2af0dcf7 perf: english traslation 2024-06-18 18:47:06 +08:00
wangruidong
44f29e166c fix: 一些任务查找不到id和执行者 2024-06-18 16:52:18 +08:00
fit2bot
f42113afb9 fix: Fixed the issue of user login statistics (#13440)
Co-authored-by: feng <1304903146@qq.com>
2024-06-18 14:18:02 +08:00
Bai
523468f7af fix: Add API Exception traceback log if settings.DEBUG_DEV enabled 2024-06-18 11:58:44 +08:00
Bai
9385d04812 fix: Add API Exception traceback log if settings.DEBUG_DEV enabled 2024-06-18 11:55:56 +08:00
Bai
ff126f3459 fix: delete account error (DoesNotExist) 2024-06-18 11:06:40 +08:00
fit2bot
2ee435a8ec perf: Translate (#13438)
Co-authored-by: feng <1304903146@qq.com>
2024-06-17 19:47:05 +08:00
fit2bot
f3a827b76b perf: Translate (#13437)
Co-authored-by: feng <1304903146@qq.com>
2024-06-17 19:22:45 +08:00
fit2bot
50ceca9f06 perf: Perms system settings (#13435)
Co-authored-by: feng <1304903146@qq.com>
2024-06-17 17:40:03 +08:00
Bai
8a5e86dfa7 fix: migrations assets 0003 json.loads error 2024-06-17 10:39:38 +08:00
fit2bot
6ffae48ab2 perf: Translate (#13431)
Co-authored-by: feng <1304903146@qq.com>
2024-06-14 19:15:41 +08:00
wangruidong
66cd6e95a8 fix: 获取账号改密的任务列表超时 2024-06-14 18:54:01 +08:00
wangruidong
b28aec527f perf: 默认关闭作业中心 2024-06-14 18:18:35 +08:00
fit2bot
9ff78c8569 perf: Lina translate (#13427)
Co-authored-by: feng <1304903146@qq.com>
2024-06-14 15:16:00 +08:00
fit2bot
d6718d7b78 perf: Device asset remove_account_enabled false (#13426)
Co-authored-by: feng <1304903146@qq.com>
2024-06-14 14:47:13 +08:00
fit2bot
32966b260a perf: Refactor OperateLogStore separator logic for database compatibility (#13424)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-06-14 14:25:14 +08:00
feng
6c59888d77 perf: Refactor OperateLogStore separator logic for database compatibility 2024-06-14 14:09:53 +08:00
Bai
1c1d839b82 fix: i18n compilemessages 2024-06-14 09:53:08 +08:00
wangruidong
7d295cc675 perf: rbac applet modify translate 2024-06-13 18:26:10 +08:00
fit2bot
75496cbe91 perf: Account backup failed (#13420)
Co-authored-by: feng <1304903146@qq.com>
2024-06-13 18:20:00 +08:00
jiangweidong
496903dfb2 fix: 解决获取用户登录后端的session_key有两种的问题 2024-06-13 17:49:56 +08:00
wangruidong
11f6a029de perf: modify translate 2024-06-13 17:45:39 +08:00
Bai
e40c66c7ed fix: select_for_update error for out join sql 2024-06-13 15:50:11 +08:00
ibuler
2a33337963 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-13 13:04:07 +08:00
ibuler
bd1a768743 perf: change some translation 2024-06-13 13:02:03 +08:00
wangruidong
0a0312695b fix: es使用https报错 2024-06-13 10:33:47 +08:00
fit2bot
0c0ec098ae perf: Modify some translations (#13412)
Co-authored-by: wangruidong <940853815@qq.com>
2024-06-12 19:38:45 +08:00
fit2bot
37ad7b32e4 perf: Cloud account translate (#13413)
Co-authored-by: feng <1304903146@qq.com>
2024-06-12 19:38:07 +08:00
ibuler
2640963938 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-12 19:29:14 +08:00
ibuler
6bc9181c25 fix: some bugs 2024-06-12 19:25:36 +08:00
fit2bot
d8379195e6 perf: Platform automation add remove account method (#13411)
Co-authored-by: feng <1304903146@qq.com>
2024-06-12 19:23:40 +08:00
Bai
9195c658a0 perf: Update djangojs.po file 2024-06-12 18:36:04 +08:00
wangruidong
3fb261b5c8 fix: Role details - multiple instances of English in permissions list 2024-06-12 17:30:03 +08:00
ibuler
aa16c3d3a1 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-12 16:19:26 +08:00
ibuler
7be6cf2b73 perf: tags update 2024-06-12 16:19:16 +08:00
wangruidong
3608b025e5 fix: es8会话记录查询不到命令 2024-06-12 15:49:57 +08:00
fit2bot
60738da053 perf: Automation remove account task fail (#13406)
Co-authored-by: feng <1304903146@qq.com>
2024-06-12 15:30:52 +08:00
Aaron3S
507ad10389 feat: add some translations for chen 2024-06-12 15:27:53 +08:00
Bai
68244b2b37 perf: 更新 lock 文件 2024-06-12 14:30:37 +08:00
wangruidong
948e9ecb4b perf: 命令存储支持ES8的版本 2024-06-12 14:15:13 +08:00
wangruidong
67bc16238c perf: i18n 2024-06-12 10:25:22 +08:00
wangruidong
7ad4d9116a fix: LDAP定时同步任务设置多个通知人,消息内容分除第一个正常,其它人都不正常 2024-06-11 18:24:43 +08:00
Aaron3S
db88f6c9b4 perf: 优化 chen 翻译文件 2024-06-11 18:19:30 +08:00
fit2bot
8b7f60d43e fix: Cloud sync related issues (#13396)
Co-authored-by: feng <1304903146@qq.com>
2024-06-11 17:42:13 +08:00
wangruidong
9439035b86 fix: 账号备份,云同步定时任务不执行 2024-06-07 18:33:46 +08:00
halo
2b220d3753 perf: 去掉account序列化中params属性 2024-06-07 15:54:33 +08:00
ibuler
cd1f6a9137 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-06 16:56:47 +08:00
ibuler
7973d066a3 revert: asset permission real accounts serializer 2024-06-06 16:56:07 +08:00
Bai
440a7ae9cc perf: 添加配置项 FILE_UPLOAD_TEMP_DIR 2024-06-06 16:32:23 +08:00
wangruidong
ad65097a8f perf: Crontab i18n 2024-06-06 14:49:56 +08:00
ibuler
1b05f56598 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-05 19:34:04 +08:00
ibuler
3468f8cd40 perf: 修改授权的账号 2024-06-05 19:33:40 +08:00
Bryan
5c81e974cd Update README.md 2024-06-05 18:00:13 +08:00
Bryan
b638cf7417 Update README.md 2024-06-05 17:53:26 +08:00
Bryan
1db1961cc0 Update README.md 2024-06-05 17:25:45 +08:00
Bryan
811afdcf1a Update README.md 2024-06-05 17:25:12 +08:00
Bryan
1f87ce2a47 Update README.md 2024-06-05 17:09:04 +08:00
Bryan
8213e38e6a Update README.md 2024-06-05 17:01:31 +08:00
ibuler
263bcbb566 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-06-04 19:08:51 +08:00
ibuler
050ddc88f2 perf: labels 支持颜色 2024-06-04 19:08:16 +08:00
Bai
40a4efc992 fix: 修复用户登录报错刷新浏览器后依旧报错的问题(登录超时,请重新登录) 2024-06-04 16:33:06 +08:00
feng
38e8791d9f perf: Community Edition Remove db client 2024-06-04 16:24:37 +08:00
老广
15d4fafbdb chrome: change github action 2024-06-04 16:23:25 +08:00
fit2bot
deb8474c1b feat: add oracle database web-cli connect method (#13358)
Co-authored-by: Aaron3S <chenyang@fit2cloud.com>
2024-06-04 14:51:47 +08:00
fit2bot
12740ead08 perf: ticket translate (#13357)
Co-authored-by: feng <1304903146@qq.com>
2024-06-04 11:01:33 +08:00
Bai
6322559bd7 perf: i18n updated 2024-06-03 19:15:40 +08:00
Aaron3S
6c5eb00fb6 feat: 增加 chen 翻译文件 2024-06-03 16:42:23 +08:00
feng
dad2f8eb65 perf: koko translate 2024-06-03 14:29:57 +08:00
Bai
c8679f48f5 perf: Update i18n 2024-06-03 11:44:16 +08:00
fit2bot
510dc1eaf2 perf: translate (#13347)
Co-authored-by: feng <1304903146@qq.com>
2024-06-03 10:26:12 +08:00
wangruidong
a313753757 perf: action i18n 2024-05-31 16:34:03 +08:00
Gerry.tan
48b037ac26 feat: 支持 Dameng 数据库 2024-05-31 14:45:41 +08:00
wangruidong
53f106b30d perf: i18n 2024-05-31 14:39:56 +08:00
jiangweidong
dfd133cf5a perf: optimize user operation logs (#13221) 2024-05-31 11:05:35 +08:00
吴小白
0d27bfcfa9 perf: 添加 arm64 缺失依赖 2024-05-31 10:56:48 +08:00
jiangweidong
cdfb11549e fix: 解决OAuth2可以跳过不存在用户不允许登录的规则 2024-05-31 10:43:01 +08:00
wangruidong
ba6660216c perf: celery task log format 2024-05-31 10:15:11 +08:00
吴小白
3536af2051 perf: 按要求移除重复构建代码 2024-05-31 10:13:22 +08:00
fit2bot
21bb0a8162 fix: translate json (#13322)
Co-authored-by: feng <1304903146@qq.com>
2024-05-30 14:20:12 +08:00
jiangweidong
d718398791 feat: refactoring sync module (#13293) 2024-05-29 18:44:32 +08:00
fit2bot
0d825927e1 perf: Optimize GitHub labels and update related workflows (#13315)
* perf: Optimize GitHub labels and update related workflows

* perf: Optimize issue template

* perf: Optimize issue template

* Update 1_bug_report.yml

* Update 1_bug_report.yml

* Update 1_bug_report.yml

* Update 1_bug_report.yml

* Update 1_bug_report.yml

* Update 2_feature_request.yml

* Update 2_feature_request.yml

* Update 3_question.yml

* Update 3_question.yml

* Update 3_question.yml

* Update 1_bug_report.yml

* Update 2_feature_request.yml

* Update 1_bug_report_cn.yml

* Update 1_bug_report_cn.yml

* Update 2_feature_request_cn.yml

* Update 1_bug_report_cn.yml

* Update 1_bug_report_cn.yml

* Update 1_bug_report_cn.yml

* Update 3_question_cn.yml

* Update 1_bug_report_cn.yml

* Update 2_feature_request_cn.yml

* Update 3_question_cn.yml

* Update 2_feature_request_cn.yml

* Update 1_bug_report.yml

* Update 1_bug_report_cn.yml

* Update 2_feature_request.yml

* Update 3_question.yml

* perf: Optimize issue template

---------

Co-authored-by: Bai <baijiangjie@gmail.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2024-05-29 18:15:13 +08:00
吴小白
0b65e3ffda perf: 按要求移除重复构建代码 2024-05-28 18:50:11 +08:00
feng
91a1da57e9 perf: mfa interface optimization, mobile phone number can be empty 2024-05-28 17:27:17 +08:00
Bai
4e8d7df005 fix: v2->v3 The issue of authorized accounts displaying as empty when there are more than 10,000 authorization rules. 2024-05-28 16:09:12 +08:00
Bai
5d1829b998 fix: Disable the applet connection method when all applet hosts have is_active set to False 2024-05-28 11:07:40 +08:00
Bai
75df845024 perf: Remove dependency django-rest-swagger 2024-05-28 10:34:37 +08:00
Bai
c103253867 perf: perm tree search 2024-05-27 18:05:21 +08:00
ibuler
f95cbd6977 merge: with remote 2024-05-27 16:46:13 +08:00
ibuler
f16ec02c40 perf: 修改翻译 2024-05-27 16:43:26 +08:00
wangruidong
0ea2339ad5 perf: notification i18n 2024-05-27 15:24:31 +08:00
feng
81da9e018a fix: windows sync remove account fail and applet deploy rbac perm error and job exection log admin auditor cannot view 2024-05-27 11:41:30 +08:00
Bai
8ebdd59e00 Merge branch 'v4_bain' into v4 2024-05-27 11:35:16 +08:00
Bai
c4e30737a4 perf: i18n bai 2024-05-27 11:34:53 +08:00
ibuler
f127aca5f8 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-05-27 11:20:59 +08:00
ibuler
7333c8e094 perf: 修改 json 空格数量 2024-05-27 11:20:35 +08:00
Bai
a1e9382275 perf: i18n bai 2024-05-27 11:13:13 +08:00
ibuler
097a6c5c5f perf: 修改 label 为 tag 2024-05-27 11:07:36 +08:00
fit2bot
4e023057cc perf: ticket translate (#13291)
Co-authored-by: feng <1304903146@qq.com>
2024-05-27 11:00:54 +08:00
Bryan
7f90fccc4f perf: The label matching policy is configured with a random selection publisher 2024-05-27 10:26:35 +08:00
ibuler
4034e2152c Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-05-24 18:43:07 +08:00
ibuler
e8d6c6b711 merge: with remote 2024-05-24 18:42:37 +08:00
Bai
43215d27c5 perf: migrations i18n 2024-05-24 14:54:56 +08:00
Bai
e20db96331 Merge branch 'v4_baisse' into v4 2024-05-24 14:42:27 +08:00
Bai
564ad40b99 perf: i18n System Settings End 2024-05-24 14:41:28 +08:00
ibuler
32ef4c79da perf: 修改翻译 2024-05-23 19:00:28 +08:00
wangruidong
af4f6ebb26 perf: dashboard i18n 2024-05-23 18:23:10 +08:00
wangruidong
33b688b021 perf: modify task log i18n 2024-05-23 18:12:52 +08:00
fit2bot
b179770dbf perf: del extra translate (#13274)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-05-22 19:24:25 +08:00
Bai
e7f92ec0d7 merged: Merge to v4 (bai) 2024-05-22 18:12:35 +08:00
Bai
79449a8a02 perf: i18n System Settings -> Authentication-OIDC 2024-05-22 17:51:45 +08:00
fit2bot
4ebcba81e0 perf: dates_metrics api speed (#13266)
Co-authored-by: feng <1304903146@qq.com>
2024-05-22 15:25:38 +08:00
wangruidong
5616d31888 perf: CeleryTaskExecution保存时去掉无用参数 2024-05-22 14:04:11 +08:00
fit2bot
f259509ef8 fix: notification migrate file (#13269)
Co-authored-by: feng <1304903146@qq.com>
2024-05-22 10:47:55 +08:00
fit2bot
82977f9023 perf: tickets notifications add default data migrate file (#13268)
Co-authored-by: feng <1304903146@qq.com>
2024-05-21 19:24:26 +08:00
Bai
4a5205c5ac perf: i18n System Settings -> Features 2024-05-21 16:11:13 +08:00
ibuler
714b4ef7f4 merge: with remote 2024-05-21 14:47:37 +08:00
ibuler
df091f0ee1 perf: 添加 terminal 的 migrate 2024-05-21 14:44:48 +08:00
wangruidong
7037cf56ec perf: i18n 2024-05-21 10:47:15 +08:00
Eric
f683d195e4 perf: update lina i18n 2024-05-20 19:06:28 +08:00
Bai
5ab55b823c perf: i18n System Settings -> General,Org,Notifications 2024-05-20 18:39:57 +08:00
吴小白
0f2c769e8d Merge pull request #13255 from jumpserver/pr@v4@fix_docker_build
fix: 修正企业镜像缺失依赖
2024-05-20 15:02:56 +08:00
吴小白
1d53f292ae fix: 修正企业镜像缺失依赖 2024-05-20 14:57:15 +08:00
wangruidong
606d2c8933 fix: 关闭ssh client后,sftp,telnet不显示客户端连接方式 2024-05-20 10:02:12 +08:00
fit2bot
a15335cac9 perf: lina ja translate (#13252)
Co-authored-by: feng <1304903146@qq.com>
2024-05-17 18:46:30 +08:00
wangruidong
f33cf07859 perf: i18n 2024-05-17 18:30:19 +08:00
fit2bot
bce55421ce perf: MenuAccountTemplates zh translate (#13250)
Co-authored-by: feng <1304903146@qq.com>
2024-05-17 17:56:09 +08:00
fit2bot
c3449cd6bc perf: account translate (#13249)
Co-authored-by: feng <1304903146@qq.com>
2024-05-17 16:47:02 +08:00
ibuler
4e903ce19b Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-05-17 16:32:08 +08:00
ibuler
90826b358c perf: 修改翻译 2024-05-17 16:31:39 +08:00
吴小白
7d46aa9892 perf: 优化发布机部署 2024-05-17 15:22:16 +08:00
ibuler
49d2bd93b7 perf: merge with remote 2024-05-17 09:59:12 +08:00
ibuler
9f103a88d6 perf: 修改 org name 2024-05-17 09:58:12 +08:00
fit2bot
ce33bdc370 perf: account related translate (#13241)
Co-authored-by: feng <1304903146@qq.com>
2024-05-16 19:39:03 +08:00
fit2bot
cdf1f81c8a perf: account automation translate (#13240)
Co-authored-by: feng <1304903146@qq.com>
2024-05-16 19:12:24 +08:00
Eric
79edff5fca perf: 支持 loki log 2024-05-16 19:00:47 +08:00
Bryan
1518f792d6 Merge pull request #13236 from jumpserver/dev
v3.10.10-lts
2024-05-16 16:04:07 +08:00
feng
a534c496d0 perf: core celery always active 2024-05-16 15:52:11 +08:00
wangruidong
a11097fb5a fix: 定时任务,再次执行报错 2024-05-16 15:48:45 +08:00
feng
d4c1f93ef6 fix: send slack message failed 2024-05-16 15:23:31 +08:00
fit2bot
9168e92669 perf: update poetry lock (#13229)
Co-authored-by: feng <1304903146@qq.com>
2024-05-16 10:27:29 +08:00
fit2bot
a7316bc7c1 perf: translate (#13228)
Co-authored-by: feng <1304903146@qq.com>
2024-05-15 18:43:31 +08:00
fit2bot
bfd030d70f perf: upgrade jms-storage (#13223)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-05-15 14:38:26 +08:00
wangruidong
da0c017c4f fix: ldap定时任务未执行 2024-05-15 14:16:33 +08:00
fit2bot
5ffc0a9665 perf: add new dependencies (#13220)
Co-authored-by: feng <1304903146@qq.com>
2024-05-15 10:13:14 +08:00
fit2bot
10e9026ec7 perf: add gpt 4o (#13218)
Co-authored-by: feng <1304903146@qq.com>
2024-05-14 16:29:41 +08:00
Bai
7c4c0b5924 fix: Fixed ACLs Asset connect select attribute assets while both include labels not matched. 2024-05-14 16:16:00 +08:00
wangruidong
42c3008ec9 perf: 更新ldap相关翻译文件 2024-05-14 15:08:37 +08:00
吴小白
2f6d743cf0 perf: 优化 CI 构建测试 2024-05-14 14:17:02 +08:00
fit2bot
e8faaeb8fb fix: Accounts of ssh key type will no longer export fingerprints. (#13215)
Co-authored-by: feng <1304903146@qq.com>
2024-05-14 13:04:11 +08:00
jiangweidong
09f802b00d perf: cloud sync module adjustment (#13197)
* perf: cloud sync module adjustment

* perf: cloud sync module adjustment
2024-05-14 10:36:17 +08:00
wangruidong
a644b84bb1 perf: dashboard zh,ja,zh_hant i18n 2024-05-13 18:31:54 +08:00
吴小白
b6f48111e3 feat: 更新 Dockerfile 2024-05-13 18:25:06 +08:00
feng
0ea675f8d6 fix: windows gather account failed 2024-05-13 18:23:40 +08:00
wangruidong
3a6e4e7fb6 perf: file transfer boot step help tips i18n 2024-05-13 18:18:27 +08:00
wangruidong
e42a98ff95 perf: celery task log css optimize 2024-05-13 18:16:36 +08:00
ibuler
8fe511cec6 perf: remove *.mo 2024-05-13 17:35:00 +08:00
Bai
ffb3cd13cb perf: Delete locale dir 2024-05-13 17:26:38 +08:00
halo
77caa5536f fix: chrome应用加载多个插件不生效问题 2024-05-13 16:30:17 +08:00
Bai
b1abf8a339 perf: Merge local v4 2024-05-13 15:58:59 +08:00
ibuler
89d20c8a4d perf: 修改一些翻译 2024-05-13 15:28:11 +08:00
ibuler
d66f923c0c perf: 修改翻译 2024-05-13 10:40:08 +08:00
ibuler
d3c14428a1 perf: remove an or a 2024-05-13 10:35:21 +08:00
ibuler
c104f85b18 perf: 修改翻译 2024-05-13 10:29:26 +08:00
fit2bot
755d8124ac perf: account backup translate (#13198)
Co-authored-by: feng <1304903146@qq.com>
2024-05-11 19:48:15 +08:00
Bai
a029cc8ed5 perf: i18n Personal Settings -> All sub menu 2024-05-11 18:55:03 +08:00
ibuler
111dfa8c29 perf: 修改大小写 2024-05-11 16:03:40 +08:00
fit2bot
52c905832b fix: 账号密钥长度为8192时 刷新账号列表504 (#13196)
Co-authored-by: feng <1304903146@qq.com>
2024-05-11 14:45:29 +08:00
ibuler
5f892c3afe perf: change i18n 2024-05-11 14:41:58 +08:00
fit2bot
313202fe41 perf: 合并 migrations (#13187)
* perf: 修改 Migrations

* perf: 合并 migrations

* perf: remove unuse

* perf: change to file

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-05-11 11:22:01 +08:00
Bai
af1adc3baa perf: i18n Personal Settings -> All sub menu 2024-05-11 11:17:02 +08:00
ibuler
be214c84d1 merge: with dev 2024-05-10 18:10:18 +08:00
fit2bot
082614e7b0 perf: A wave of migration Japan, Taiwan China font (#13188)
Co-authored-by: feng <1304903146@qq.com>
2024-05-10 15:13:40 +08:00
Bai
94ee3169dc perf: While Asset amount (GLOBAL) > 5000 delay (20s) refresh user perm tree 2024-05-10 12:38:31 +08:00
wangruidong
83835747c5 perf: i18n 2024-05-10 10:06:44 +08:00
Bai
2a7b48c83d perf: i18n Personal Settings -> Profile 2024-05-09 15:26:38 +08:00
ibuler
a9068496d9 perf: 打算压缩 migratons 2024-05-09 11:01:01 +08:00
fit2bot
8bad88e798 perf: 优化账号相关翻译 (#13177)
Co-authored-by: feng <1304903146@qq.com>
2024-05-08 18:04:46 +08:00
fit2bot
92b6286feb fix: ldap更换OU后无法登录 (#13172)
* fix: ldap更换OU后无法登录

* perf: 翻译

---------

Co-authored-by: wangruidong <940853815@qq.com>
2024-05-08 14:23:20 +08:00
Bai
bce776bb63 fix: 修复 v2 升级到 v3 授权的手动登录系统用户显示空字符串的问题 2024-05-07 14:33:01 +08:00
吴小白
9f45eeeb1f fix: 优化构建缓存 2024-05-07 11:43:40 +08:00
wangruidong
dc39cbf037 fix: ldap定时任务未执行 2024-05-07 10:27:44 +08:00
吴小白
60110982f1 fix: 修正构建错误 2024-04-30 11:24:17 +08:00
ibuler
259204bfe2 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-04-30 10:42:31 +08:00
wangruidong
c55e9679db perf: dashboard i18n 2024-04-30 10:31:22 +08:00
ibuler
c05a3c315a Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-04-29 15:07:25 +08:00
ibuler
dbdf586f5b add i18n 2024-04-29 15:06:53 +08:00
Bai
b1bd4db3e9 perf: Update poetry.lock 2024-04-29 11:47:18 +08:00
fit2bot
7806a13db5 feat: 默认数据库使用 PostgreSQL (#13088)
Co-authored-by: 吴小白 <296015668@qq.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2024-04-29 11:46:16 +08:00
Bai
928f564109 merge: into dev from v4: poetry lock file updated 2024-04-29 11:20:37 +08:00
Bai
328f718fe8 merge: into dev from v4: i18n file 2024-04-29 11:16:09 +08:00
Bai
cb4402c610 merge: into dev from v4 2024-04-29 11:07:43 +08:00
feng626
fbc4cb9046 Revert "perf: remove ticket model" (#13145)
This reverts commit 94567b86f0.
2024-04-28 18:26:49 +08:00
feng
94567b86f0 perf: remove ticket model 2024-04-28 18:02:57 +08:00
Bai
38175d6b57 fix: Fixed csv file export for 0 chars is not appear 2024-04-28 17:56:45 +08:00
ibuler
8aa707427f pref: remove user source choice 2024-04-28 16:01:09 +08:00
wangruidong
7408ed0f03 perf: add XPACKModelFieldsMixin 2024-04-28 15:58:14 +08:00
wangruidong
5135186961 perf: 社区版去掉一些东西 2024-04-28 15:58:14 +08:00
wangruidong
5be399616b fix: 华为交换机执行某些命令报错 2024-04-28 14:17:38 +08:00
ibuler
7d64b8419f Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-04-28 14:04:55 +08:00
ibuler
fad9249810 perf: 再次修改菜单 2024-04-28 14:04:28 +08:00
wangruidong
46a23afbec perf: 创建、更新用户时MFA选项根据系统设置选项进行动态渲染 2024-04-26 11:35:56 +08:00
Bai
8c4add241d perf: Support django shell run orm output SQL 2024-04-26 10:39:49 +08:00
Bai
feee92daee fix: Fixed issue of v2 to v3 Account missing su_from 2024-04-25 19:13:34 +08:00
Bai
42054c7989 feat: Support asset tree node drag to another one 2024-04-24 18:05:51 +08:00
wangruidong
bb4fbc3a1c perf: index page typo 2024-04-24 18:05:03 +08:00
Aaron3S
9b20b67039 fix: 修复执行快捷命令时 local_connection 没有被正确设置 2024-04-23 19:07:22 +08:00
Bai
2acc84dc69 fix: Adhoc support mariadb with module of mysql 2024-04-23 18:57:08 +08:00
ibuler
d7916a62f0 perf: 修改翻译 2024-04-23 18:11:05 +08:00
吴小白
3383d0f314 perf: 镜像添加 nc 命令 2024-04-23 16:53:25 +08:00
Bai
c9858b5a84 fix: 修改配置 RECEPTOR_ENABLED=False 默认 2024-04-23 16:52:44 +08:00
Bai
25e21b185f fix: 修改配置 RECEPTOR_ENABLED 2024-04-23 15:03:04 +08:00
ibuler
da27e1b93c perf: 修改翻译 2024-04-23 14:16:21 +08:00
Aaron3S
720231f692 feat: 修改 receptor 容器通信地址 2024-04-23 13:12:18 +08:00
jiangweidong
95f29a584e perf: 优化会话过期500问题 2024-04-23 13:11:41 +08:00
Bai
50cbb75b96 perf: 优化 Web 资产详情时根据 autofill 类型返回对应的 spec_info 信息 2024-04-23 13:09:40 +08:00
Bai
67277dd622 fix: 修复仪表盘会话排序数量都是 1 的问题 2024-04-22 19:42:33 +08:00
Bryan
82e7f020ea Merge pull request #13094 from jumpserver/dev
v3.10.9 (dev to master)
2024-04-22 19:39:53 +08:00
Bai
d418647774 fix: 修复仪表盘会话排序数量都是 1 的问题 2024-04-22 19:37:45 +08:00
Bai
6b5d4a4810 fix: 修复仪表盘会话排序数量都是 1 的问题 2024-04-22 19:32:42 +08:00
Eric
2cc67634a4 perf: 发布机支持平台连接参数 2024-04-22 16:40:41 +08:00
ibuler
99b24cad00 perf: add open sans font 2024-04-22 15:08:28 +08:00
fit2bot
52922088a9 feat: 优化代码结构,receptor开关,修改为 tcp 通信 (#13078)
* feat: 优化代码结构,receptor开关,修改为 tcp 通信

* fix: 修改导包路径

* fix: 修复错别字

* fix: 修改导包路径

* perf: 优化代码

* fix: 修复任务不执行的问题

* perf: 优化配置项名称

* perf: 优化代码结构

* perf: 优化代码

---------

Co-authored-by: Aaron3S <chenyang@fit2cloud.com>
2024-04-22 13:51:52 +08:00
jiangweidong
ef7329a721 perf: 优化频繁发送短信,将后端的频繁发送警告提示到页面上来提醒用户 2024-04-22 13:20:51 +08:00
Bai
ad0bc82539 perf: 优化 HUAWEI 设备判断逻辑 2024-04-22 13:19:32 +08:00
wangruidong
1ecf8534f6 perf: 兼容自定义平台的华为交换机执行命令 2024-04-22 13:19:32 +08:00
feng
94286caec4 fix: 命令输出取消长度限制 2024-04-22 10:31:35 +08:00
wangruidong
d4c8425218 fix: 快捷命令账号选择未按账号数量排序 2024-04-22 10:31:02 +08:00
fit2bot
59f9a4f369 fix: 获取 k8s 树取消异常 返回空 优化错误日志 (#13077)
Co-authored-by: feng <1304903146@qq.com>
2024-04-19 17:41:41 +08:00
Bai
64125051df fix: Org is None not has id attribute 2024-04-19 17:15:30 +08:00
Bai
660572a0ea fix: merge_delay_run 偶尔会出现 (2006, MySQL server has gone away 的报错) 2024-04-19 17:15:30 +08:00
ibuler
c0273dc698 perf: 去掉 js 报错 2024-04-19 11:21:27 +08:00
Bai
2782d4b5f1 fix: 修复 Celery Execution 任务保存失败导致 View 事务回滚的问题(首次登录用户修改密码失败) 2024-04-18 21:21:09 +08:00
ibuler
9dbdd6ac60 perf: change i18n 2024-04-18 20:12:01 +08:00
Bryan
f20b9e01ab Merge pull request #13062 from jumpserver/dev
v3.10.8 dev to master
2024-04-18 18:01:20 +08:00
fit2bot
d4f9e30306 perf: translate (#13061)
Co-authored-by: feng <1304903146@qq.com>
2024-04-18 17:28:55 +08:00
Bryan
8cf8a3701b Merge pull request #13059 from jumpserver/dev
v3.10.8
2024-04-18 17:16:37 +08:00
Aaron3S
1b221d1cb6 fix: celery kwargs 参数解析问题 2024-04-18 17:06:09 +08:00
halo
fbf42ebbf9 perf: 更新客户端版本 2024-04-18 15:58:50 +08:00
Aaron3S
a0c4eae04c perf: 优化变量名, 防止和翻译方法冲突 2024-04-18 14:31:44 +08:00
Aaron3S
d1c293940a fix: 修复 celery task not found 的问题 2024-04-18 14:31:44 +08:00
Aaron3S
6f2d04a029 fix: 修复自动化任务重包含多个playbook runtime 目录被提前删除的问题 2024-04-18 14:10:34 +08:00
wangruidong
29dbc2e4d4 perf: 用户详情页-资产授权规则字段排序优化 2024-04-18 13:14:16 +08:00
wangruidong
e8d717d174 fix: 资产不存在指定用户的时候,没有用特权用户任务未执行 2024-04-17 20:17:24 +08:00
Aaron3S
138a3a2f46 fix: 修复 receptor_ctl 的并发安全问题 2024-04-17 18:58:20 +08:00
fit2bot
cade2cfa13 fix: 改密推送没有更新版本 (#13044)
Co-authored-by: feng <1304903146@qq.com>
2024-04-17 16:14:40 +08:00
wangruidong
ac988a76b4 fix: 重启服务禁用的定时任务会执行问题 2024-04-17 14:25:10 +08:00
ibuler
5a9815481a perf: 修改 token expire 逻辑 2024-04-17 14:23:56 +08:00
ibuler
f8953441e3 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-04-17 14:09:25 +08:00
ibuler
5b41eddacc perf: 修改翻译 2024-04-17 13:49:43 +08:00
feng
bfbddfdead fix: 【账号改密】任务列表-详情:获取任务记录tab报错 2024-04-17 11:27:18 +08:00
Aaron3S
3cf526fdf3 fix: 修复测试根节点连接性 task 找不到的问题 2024-04-16 19:27:56 +08:00
Aaron3S
f6a4ee54d0 fix: 补充遗漏的网关参数 2024-04-16 19:27:56 +08:00
wangruidong
5755d281d7 perf: ldap测试登录前端不需要先测试连接 2024-04-16 18:13:45 +08:00
Aaron3S
1569524583 fix: 修复调用 ssh_ping 模块测试走网关的资产连接性失败 2024-04-16 17:14:30 +08:00
fit2bot
7ba876eb0a fix: 登录复核 审批后 刷新页面工单没清除 (#13031)
Co-authored-by: feng <1304903146@qq.com>
2024-04-16 14:04:18 +08:00
wangruidong
a31ea77b3c fix: 会话详情中文件传输显示有误 2024-04-16 10:38:05 +08:00
Aaron3S
44445a9482 fix: 修复一些因使用 receptor runner 造成的 bug 2024-04-15 19:42:36 +08:00
Bai
b8449a6efa fix: Export csv file can run program for windows 2024-04-15 19:42:03 +08:00
fit2bot
ccf6b00084 perf: 迁移文件和翻译 (#13024)
Co-authored-by: feng <1304903146@qq.com>
2024-04-15 17:57:47 +08:00
fit2bot
4423f842e0 fix: 历史账号数量计算错误 (#13023)
Co-authored-by: feng <1304903146@qq.com>
2024-04-15 17:17:11 +08:00
ibuler
a432af1a6d perf: 修改翻译 2024-04-15 16:34:02 +08:00
fit2bot
7660e3228e fix: 【账号推送】创建账号推送失败 (#13021)
Co-authored-by: feng <1304903146@qq.com>
2024-04-15 14:48:58 +08:00
wangruidong
482f5613e4 fix: 会话详情中文件传输显示有误 2024-04-15 14:42:18 +08:00
Bai
3cfb46f798 fix: Update jms-storage version 0.0.57 2024-04-15 14:34:58 +08:00
吴小白
f987515b89 perf: 优化发布机日志输出 2024-04-15 12:04:26 +08:00
fit2bot
f0d1279a42 perf: 修改user session 权限判断 (#13019)
Co-authored-by: feng <1304903146@qq.com>
2024-04-15 11:26:22 +08:00
halo
140118c9c6 perf: 更新copyright年份 2024-04-15 10:33:45 +08:00
wangruidong
637b9b1b15 perf: 申请工单-指定账号信息优化 2024-04-12 13:26:23 +08:00
Aaron3S
969069dde0 feat: receptor 中添加环境变量 2024-04-12 13:24:54 +08:00
Jiangweidong
84a71c8b3a perf: 火山引擎翻译 2024-04-12 13:24:32 +08:00
fit2bot
f3bd727c32 perf: 改密失败发给收件人 (#13009)
Co-authored-by: feng <1304903146@qq.com>
2024-04-12 11:53:47 +08:00
Aaron3S
2ac87e4ad6 feat: 修改重复的删除目录的逻辑 2024-04-12 11:35:51 +08:00
fit2bot
3740a4ad6f fix: 开启仅一台设置登录 退出失败 (#13007)
Co-authored-by: feng <1304903146@qq.com>
2024-04-12 11:16:58 +08:00
fit2bot
3bc8db7c3d fix: 改密任务记录搜索失败 (#13006)
Co-authored-by: feng <1304903146@qq.com>
2024-04-12 11:02:47 +08:00
fit2bot
f3d19ad9f4 fix: 【Lark】绑定时,一些报错信息优化 (#13004)
Co-authored-by: feng <1304903146@qq.com>
2024-04-12 10:39:49 +08:00
Bai
d2396afdd5 fix: User my assets sorted by connectivity did not take effect 2024-04-12 10:39:34 +08:00
Eric
43f9c07838 perf: 优化任务日志输出 2024-04-11 22:27:44 +08:00
Aaron3S
6052306c04 feat: ansible receptor kill 进程 2024-04-11 22:26:01 +08:00
Aaron3S
6a12bc39e9 feat: ansible receptor 适配文件上传 2024-04-11 22:22:29 +08:00
Bai
3f67b40975 fix: Export excel file can running instructions(csv no need deal) 2024-04-11 20:37:17 +08:00
fit2bot
0adc854721 perf: 优化审计台命令记录代码 (#12998)
Co-authored-by: feng <1304903146@qq.com>
2024-04-11 18:32:00 +08:00
fit2bot
ab76745a9f perf: 优化审计台仪表盘命令记录总数统计数据库和所有es数据 (#12997)
Co-authored-by: feng <1304903146@qq.com>
2024-04-11 18:29:02 +08:00
Aaron3S
574639d5e1 feat: 支持 ansible receptor private 方式认证, 支持运行完成工作空间清理 2024-04-11 17:51:22 +08:00
fit2bot
fa5d9d3df4 fix: 二级审批通过,一级审批人员查看不到工单 (#12993)
Co-authored-by: feng <1304903146@qq.com>
2024-04-11 16:35:00 +08:00
Aaron3S
0c31925131 feat: 设置默认的 ansible 配置文件 2024-04-11 15:10:39 +08:00
wangruidong
94b5d8b9e9 perf: 处理停止任务异常情况 2024-04-11 14:25:40 +08:00
Bai
bffc9f4b1d fix: Fix session Duration label 2024-04-11 11:00:46 +08:00
wangruidong
6b5d18222e fix: 全局组织-组织角色用户数量不对 2024-04-10 18:20:05 +08:00
Aaron3S
2b05fd5276 fix: 修复 ansible receptor playbook 无法执行的问题 2024-04-10 18:18:32 +08:00
fit2bot
3e46d72ba3 fix: 修复lark登录 Backend错误问题 (#12981)
Co-authored-by: feng <1304903146@qq.com>
2024-04-10 17:07:48 +08:00
feng
6502adb772 perf: 切换zh hant 2024-04-10 14:39:58 +08:00
fit2bot
a8112c86e3 feat: 全面修改 ansible 执行方式为 receptor (#12975)
* feat: 修复 receptor kill job  的问题

* feat: 全面修改 ansible 执行方式为 receptor

---------

Co-authored-by: Aaron3S <chenyang@fit2cloud.com>
2024-04-10 11:35:38 +08:00
wangruidong
8911c9c649 fix: Luna引导下载版本更新 2024-04-09 20:10:30 +08:00
Bai
3b70b4cf9e feat: LDAP User Auth support cache user_dn 2024-04-09 20:09:50 +08:00
wangruidong
1e0ea3905e fix: 忘记密码短信验证码过期 2024-04-09 20:05:34 +08:00
ibuler
2afabd65f9 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-04-09 18:43:29 +08:00
ibuler
85cb80cbfe perf: remove gpt category 2024-04-09 18:43:06 +08:00
fit2bot
79f8480ae4 perf: core celery 不做报警 (#12970)
Co-authored-by: feng <1304903146@qq.com>
2024-04-09 17:07:48 +08:00
Bai
dec502e025 perf: Update user orgs roles 2024-04-09 16:52:11 +08:00
Aaron3S
c7b5cc7d89 feat: 暂时注释ansible runner write pid 逻辑 2024-04-09 16:46:56 +08:00
Aaron3S
bc76ce50e1 feat: 修改 receptor 启动参数 2024-04-09 15:59:14 +08:00
Bai
be90bf6b28 perf: Update user orgs roles 2024-04-09 15:43:27 +08:00
hzhfit2cloud
dfa68d1ca8 支持中文繁体 2024-04-09 15:18:36 +08:00
hzhfit2cloud
0237edf6c1 支持中文繁体 2024-04-09 15:18:36 +08:00
吴小白
6a87221c2a fix: 修正构建错误 2024-04-09 10:11:04 +08:00
ibuler
f0e87ef3f8 perf: rdp token 复用
perf: connection token
2024-04-08 19:03:47 +08:00
fit2bot
cd19a276c9 fix: 修复工单申请人过滤问题 (#12957)
Co-authored-by: feng <1304903146@qq.com>
2024-04-08 18:56:59 +08:00
jiangweidong
5ea4bba676 perf: 优化资产修改激活状态记录操作日志 2024-04-08 18:52:46 +08:00
吴小白
8500f186f6 perf: 优化镜像构建 2024-04-08 18:52:22 +08:00
Bryan
8c93d419fe Merge pull request #12956 from jumpserver/revert-12949-dev
Revert "feat: 支持中文繁体"
2024-04-08 18:05:45 +08:00
Bryan
2530827d07 Revert "feat: 支持中文繁体" 2024-04-08 18:04:38 +08:00
Bryan
8e54c446bc Merge pull request #12949 from elf168/dev
feat: 支持中文繁体
2024-04-08 18:02:31 +08:00
Bryan
3456e9ac5b Merge branch 'dev' into dev 2024-04-08 18:01:55 +08:00
fit2bot
689f858f97 feat: 支持 ansible 沙盒运行 (#12953)
* feat: 支持 ansible 沙盒运行

* feat: 修改 receptor sock 默认路径

* feat: 增加 adhoc 执行命令的 local connection 权限

---------

Co-authored-by: Aaron3S <chenyang@fit2cloud.com>
Co-authored-by: Bai <baijiangjie@gmail.com>
2024-04-08 17:54:34 +08:00
jiangweidong
93eebd7876 perf: 依赖包去掉多余的内容 2024-04-08 17:38:49 +08:00
jiangweidong
82cc21ef59 perf: 增加火山引擎依赖包volcengine-python-sdk 2024-04-08 17:38:49 +08:00
wangruidong
e61f9efbf2 perf: 内置平台置顶 2024-04-08 16:33:44 +08:00
ibuler
97f60a61e0 perf: 修改翻译 2024-04-08 14:32:14 +08:00
Bai
45bac09dc7 perf: ROOT Org show orgs-and-roles in user-detail page 2024-04-08 14:00:57 +08:00
Eddie
989a970a7c 簡轉繁 2024-04-07 10:57:48 +00:00
Eddie
0296df0480 簡轉繁 2024-04-07 10:31:04 +00:00
wangruidong
9776d35140 perf: 批量上传添加权限校验 2024-04-07 15:49:41 +08:00
fit2bot
0aeea414f5 fix: 支持 SSO 用户登录时校验 (#12923)
Co-authored-by: feng <1304903146@qq.com>
2024-04-07 14:57:38 +08:00
Bai
9817154234 perf: 优化所有View默认排序规则(name) 2024-04-03 19:10:34 +08:00
Bai
39ae14877b perf: 优化所有View默认排序规则(name) 2024-04-03 18:33:00 +08:00
Bai
9c238a9147 perf: 优化所有View默认排序规则(name) 2024-04-03 18:12:15 +08:00
fit2bot
42d7e983e4 perf: 翻译 (#12937)
Co-authored-by: feng <1304903146@qq.com>
2024-04-03 16:53:08 +08:00
fit2bot
611d0b71e8 fix: 修复用户下线失败问题 SESSION_EXPIRE_AT_BROWSER_CLOSE 可配置 (#12936)
Co-authored-by: feng <1304903146@qq.com>
2024-04-03 16:41:37 +08:00
Bai
d78d55091c fix: 修复过滤用户组织角色不生效的问题 2024-04-03 15:52:52 +08:00
ibuler
3b8aab8c25 perf: 修改 export 使用的 serializer 2024-04-02 19:15:48 +08:00
Eric
2f16bdc4be perf: 优化针对低版本 ssh 版本的任务 2024-04-02 19:01:21 +08:00
wangruidong
22d70eb416 fix: 华为交换机执行快捷命令报错 2024-04-02 18:48:40 +08:00
wangruidong
afa1ba4f6b fix: 统一成模板 2024-04-02 17:21:47 +08:00
ibuler
39d3e5477c perf: migrate label model with the id 2024-04-02 16:47:38 +08:00
Bryan
08ac8b0857 Update README.md 2024-04-02 15:27:28 +08:00
ibuler
255817f5c6 perf: 修改翻译 2024-04-02 14:27:18 +08:00
ibuler
19b196eb1f Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-04-01 19:28:26 +08:00
ibuler
40db6485dd perf: change i18n 2024-04-01 19:28:08 +08:00
Bryan
b23e99885e Update README.md 2024-04-01 18:47:29 +08:00
Bryan
22fbbb92da Update README.md 2024-04-01 18:41:34 +08:00
Bryan
99c94166bb Update README.md 2024-04-01 18:38:59 +08:00
Bryan
169254a1c7 Update README.md 2024-04-01 18:22:11 +08:00
Bryan
bda6037b2a Update README.md 2024-04-01 18:21:35 +08:00
Bryan
1cf0b15528 Update README.md 2024-04-01 18:08:47 +08:00
Bryan
ff3865d1a7 Update README.md 2024-04-01 18:01:56 +08:00
Bryan
10435788bc Update README.md 2024-04-01 17:37:11 +08:00
Bai
02750e56d9 perf: Update README.md 2024-04-01 17:09:08 +08:00
ibuler
a1d53cba44 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-29 19:01:01 +08:00
fit2bot
d499b94e04 fix: gpt 配置取消长度限制 (#12907)
Co-authored-by: feng <1304903146@qq.com>
2024-03-29 18:53:24 +08:00
Bai
b921ca8c9d perf: Update README.md 2024-03-29 18:46:11 +08:00
fit2bot
7a6468530f fix: 修复测试rdp资产可连接性时使用的python解释器路径不对问题 (#12902)
Co-authored-by: feng <1304903146@qq.com>
2024-03-29 16:09:42 +08:00
ibuler
29b38632e2 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-29 15:30:31 +08:00
ibuler
56193f833f perf: change some translation 2024-03-29 15:29:04 +08:00
fit2bot
02893c2a2b perf: 翻译 (#12899)
Co-authored-by: feng <1304903146@qq.com>
2024-03-29 15:18:54 +08:00
Eric
4470b68de9 perf: 优化代码,避免录像下载异常 2024-03-29 11:37:47 +08:00
wangruidong
d3d89b0853 perf: 去掉工单重新打开状态 2024-03-29 11:06:51 +08:00
wangruidong
681cecc52b perf: 优化所有资源列表的默认排序规则 2024-03-29 10:48:54 +08:00
Bryan
2c8b977001 Update README.md 2024-03-28 19:05:42 +08:00
Bryan
4827fcf243 Update README.md 2024-03-28 19:02:39 +08:00
fit2bot
3336a4526b fix: 解决beat无法在redis-ssl下运行报错的问题 (#12893)
Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2024-03-28 18:44:52 +08:00
feng
bca0863952 fix: 【标签】标签绑定资源api需校验正确的uuid 2024-03-28 18:43:00 +08:00
Bryan
9140ed6969 Update README.md 2024-03-28 18:01:16 +08:00
Bryan
24e7597c67 Update README.md 2024-03-28 17:59:37 +08:00
Bryan
833dd654b2 Update README.md 2024-03-28 17:57:02 +08:00
Bryan
ae74154071 Update README.md 2024-03-28 17:52:37 +08:00
Bryan
fb1631c1c7 Update README.md 2024-03-28 17:49:53 +08:00
Bryan
1c6832b9b2 Update README.md 2024-03-28 17:11:55 +08:00
Bryan
77d06037bb Update README.md 2024-03-28 17:05:12 +08:00
Bai
136e62b97d perf: Update README.md 2024-03-28 17:02:52 +08:00
Bryan
24c36087dd Update README.md 2024-03-28 16:33:24 +08:00
Bryan
73f9d721fe Update README.md 2024-03-28 16:10:32 +08:00
Bryan
792f8b2d1f Update README.md 2024-03-28 16:08:05 +08:00
Bryan
6871d194a8 Update README.md 2024-03-28 16:07:22 +08:00
Bryan
12c26e4551 Update README.md 2024-03-28 15:56:55 +08:00
fit2bot
bf1a29fac2 fix: 修改content type 权限 (#12890)
Co-authored-by: feng <1304903146@qq.com>
2024-03-28 15:22:26 +08:00
wangruidong
47ceaf967c fix: 查看作业命令任务执行结果添加用户隔离 2024-03-28 14:42:08 +08:00
ibuler
3426f650fa Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-28 14:40:31 +08:00
feng
00c5b3c0a2 fix: 【资产登录】属性为标签时,规则不生效 2024-03-28 14:36:17 +08:00
ibuler
f224dc241e perf: 修改翻译 2024-03-28 14:31:27 +08:00
Bryan
f6effb3c40 Update README.md 2024-03-28 14:21:02 +08:00
Bryan
6bbdcc060d perf: Update README.md 2024-03-28 11:36:24 +08:00
Bryan
14411d8c86 Update README.md 2024-03-28 11:05:04 +08:00
Bryan
cca2bfee4e perf: Update README.md 2024-03-28 10:42:01 +08:00
Bryan
c6cc68601b perf: Update README.md 2024-03-28 10:40:48 +08:00
Bai
06f33e4bdc perf: Update README.md 2024-03-27 18:15:29 +08:00
ibuler
616b38158a Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-27 17:51:12 +08:00
ibuler
c22f88ae42 perf: 修改翻译 2024-03-27 17:50:44 +08:00
fit2bot
3aeadc2f03 fix: 修复收藏文件夹中的资产时不时莫名的丢失 (#12886)
Co-authored-by: feng <1304903146@qq.com>
2024-03-27 16:04:16 +08:00
wangruidong
f0cbd77310 perf: 优化资产、网域、网关的操作体验 2024-03-27 16:02:08 +08:00
Bai
3bf401f029 perf: Update README.md 2024-03-26 19:34:06 +08:00
Bai
0b8b74b7a4 perf: Update README.md 2024-03-26 18:48:10 +08:00
Bai
e1bd0ee3d7 perf: Update README.md 2024-03-26 18:30:30 +08:00
fit2bot
f11852c60d perf: lark logo (#12878)
Co-authored-by: feng <1304903146@qq.com>
2024-03-26 17:46:16 +08:00
Bai
4b0d95ed0c perf: Update README.md 2024-03-26 17:40:22 +08:00
feng
8b870678df perf: 翻译 2024-03-26 17:34:27 +08:00
feng
470a088a9f feat: 拆分 feishu lark 2024-03-26 17:10:25 +08:00
Bai
fedb146025 perf: Update README.md 2024-03-26 16:57:52 +08:00
Bai
695a5eb470 perf: Update README.md 2024-03-26 16:53:04 +08:00
jiangweidong
ccd4f3ada4 fix: tcpdump想捕捉所有ip时,空ip被解析成0.0.0.0,导致捕捉不到的问题 2024-03-22 17:31:03 +08:00
ibuler
ae7a562b85 fix: ansible playbook render and run in localhost 2024-03-22 17:06:19 +08:00
wangruidong
be6d8566da perf: 去掉enabled字段默认值 2024-03-22 16:02:25 +08:00
ibuler
f6e4d909ff Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-22 10:17:36 +08:00
ibuler
6c0299b05a perf: 优化语言更改 2024-03-21 19:13:00 +08:00
wangruidong
f264bf03ff feat: 支持开启、关闭定时任务执行 2024-03-21 18:23:41 +08:00
fit2bot
02c2ee8c54 perf: 登录界面文案优化 (#12849)
Co-authored-by: feng <1304903146@qq.com>
2024-03-21 16:21:44 +08:00
Eric
d71374ca8a perf: 优化代码 2024-03-21 16:08:34 +08:00
Eric
0589f7fe33 perf: 支持发布机卸载远程应用 2024-03-21 16:08:34 +08:00
fit2bot
a5e8792092 perf: 翻译 (#12847)
Co-authored-by: feng <1304903146@qq.com>
2024-03-21 11:32:23 +08:00
fit2bot
15acfe84b0 perf: 改密记录可查看密文 (#12821)
* perf: 改密记录可查看密文

* perf: 自动化任务错误处理

* feat: 改密记录可批量重试 新增更多过滤选项

* perf: 改密任务失败添加消息通知

---------

Co-authored-by: feng <1304903146@qq.com>
2024-03-21 11:05:04 +08:00
jiangweidong
08b483140c fix: 解决FTP审计文件无法清理的问题 2024-03-20 19:06:30 +08:00
Bai
cf1e048328 perf: 优化 Session 支持 duration 字段 2024-03-20 15:51:33 +08:00
Bai
fb02095568 perf: Remove settigns.LITE 2024-03-19 19:22:29 +08:00
Bai
d5675ce498 perf: update poetry.lock 2024-03-19 18:10:02 +08:00
ibuler
ccbb860de1 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-19 17:54:00 +08:00
ibuler
5e104a3dd2 perf: 修改翻译 2024-03-19 17:53:29 +08:00
Bai
51890c94cc perf: 对ce、ee依赖库进行分组 2024-03-19 16:35:15 +08:00
Bai
06259a2d63 perf: 对ce、ee依赖库进行分组 2024-03-19 16:31:45 +08:00
wangruidong
a6228f145d fix: 作业命令用户隔离执行 2024-03-19 11:25:46 +08:00
ibuler
b6ab3df038 perf: 优化 celery task log 权限控制 2024-03-18 19:00:04 +08:00
ibuler
e9f591b33b perf: 优化 ops task 2024-03-18 18:54:48 +08:00
wangruidong
90d4914280 perf: 删除job-execution/asset-detail接口 2024-03-18 18:54:27 +08:00
wangruidong
80a506e99f perf:LDAP报错信息不对 2024-03-18 15:56:57 +08:00
Eric
d8a891a7d7 perf: 支持发布机仅初始化配置 2024-03-18 15:52:42 +08:00
wangruidong
d71c41e384 perf: 提高短信发送任务优先级 2024-03-18 15:50:00 +08:00
fit2bot
bb27ff7f8a fix: 批量上传文件关闭作业中心配置后上传会报错 (#12814)
* fix: 批量上传文件关闭作业中心配置后上传会报错

* fix: format

---------

Co-authored-by: wangruidong <940853815@qq.com>
Co-authored-by: Bai <baijiangjie@gmail.com>
2024-03-18 15:49:13 +08:00
wangruidong
0671e56d65 fix: Another user can use this job id to spoof both the file name and
its contents
2024-03-18 14:22:17 +08:00
ibuler
d04ac09e82 perf: 修改 groups api 2024-03-15 19:18:49 +08:00
feng
73a4ce0943 perf: 优化user secret key 处理逻辑 2024-03-15 11:39:59 +08:00
fit2bot
902fac61e9 perf: playbook api 去掉多余的rbac_perms (#12813)
Co-authored-by: feng <1304903146@qq.com>
2024-03-14 14:27:31 +08:00
wangruidong
dcd7f9f7e6 perf: 支持终断批量快捷命令执行的任务 2024-03-14 14:20:47 +08:00
Bai
80035e7cb6 fix: 修复 Playbook 脚本文件问题 2024-03-14 10:26:30 +08:00
Eric
e2d14f5e4b perf: 支持 razor 的监控 2024-03-13 19:36:26 +08:00
ibuler
cae9f03892 perf: 修改 platform 翻译 2024-03-13 18:40:35 +08:00
刘瑞斌
a27cc22596 chore: edit readme_en 2024-03-13 15:47:04 +08:00
ibuler
72362274ce perf: 优化 console_orgs 的选择问题 2024-03-13 10:58:30 +08:00
feng
cfb1d306a3 perf: 优化user session 逻辑 2024-03-13 10:58:03 +08:00
ibuler
bffcd6107c perf: 修改翻译 2024-03-12 18:47:44 +08:00
wangruidong
e5cb99d682 perf: 登录页面排版优化 2024-03-12 17:05:03 +08:00
ibuler
056e0c816b perf: 修改翻译 2024-03-12 17:04:26 +08:00
fit2bot
cbd812ab5f feat: 自定义footer (#12795)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-03-12 14:36:20 +08:00
ibuler
ea67312877 perf: 修改翻译 2024-03-11 19:20:18 +08:00
Bai
d0117b5a91 perf: 优化邮箱校验逻辑 2024-03-11 18:41:50 +08:00
jiangweidong
afe3777895 perf: 减少一次邮箱的判断 2024-03-11 18:41:50 +08:00
jiangweidong
e45676edc4 perf: 优化获取邮箱后缀代码位置 2024-03-11 18:41:50 +08:00
jiangweidong
60e4b19d07 perf: 优化三方登录创建的用户邮箱会校验,非法邮箱会重置成默认格式 2024-03-11 18:41:50 +08:00
Bai
86d76c53d6 perf: 优化 MongoDB 数据库支持 authSource 认证数据库配置 2024-03-11 18:27:57 +08:00
fit2bot
b50f1a662d fix: 优化手动输入的账号username遵循登录资产的ACL控制 (#12774)
Co-authored-by: feng <1304903146@qq.com>
2024-03-11 15:10:51 +08:00
fit2bot
b3e4c10bc2 perf: 用户个人设置操作记录翻译 (#12788)
Co-authored-by: feng <1304903146@qq.com>
2024-03-11 15:10:15 +08:00
ibuler
327cdc8604 perf: 修改翻译 2024-03-11 14:33:14 +08:00
Bai
ba11e646d6 fix: 修复 redis lock 导致 celery 异步任务卡住不执行的问题 2024-03-11 14:12:18 +08:00
wangruidong
6de524c797 perf: 不满足自动登录勾选条件时从禁用修改为隐藏 2024-03-08 18:35:18 +08:00
Bai
2e067a7950 perf: 优化升级 django-celery-beat==2.6.0; 删除之前修复的 celery-beat 的代码 2024-03-08 17:47:07 +08:00
fit2bot
a3658136e2 feat: 支持配置资产连接默认打开方式 (#12781)
Co-authored-by: feng <1304903146@qq.com>
2024-03-08 10:47:18 +08:00
Bai
4108415894 perf: 优化 issue 提交模版 2024-03-08 10:33:04 +08:00
Bai
ae2fdff9a7 perf: 优化 issue 提交模版 2024-03-07 18:58:28 +08:00
ibuler
6f37cc4d01 merge: with remote 2024-03-07 18:36:03 +08:00
ibuler
003dd49ed6 perf: 修改翻译 2024-03-07 18:33:13 +08:00
Bai
46d57f02e7 perf: i18n settings-systemtask done. 2024-03-07 17:29:03 +08:00
Bai
30915a93e5 perf: i18n settings-tools done. 2024-03-07 16:15:09 +08:00
Bryan
b9422c096e fix: 修复连接 Token 时报错的问题((1139, "Got error empty (sub)expression from regexp")) (#12768) 2024-03-07 12:37:33 +08:00
fit2bot
b3e73605b0 perf: 创建网域时资产不用必选 (#12766)
Co-authored-by: feng <1304903146@qq.com>
2024-03-07 11:20:40 +08:00
Bai
c64480dc33 perf: i18n settings-Interface not done. 2024-03-06 17:49:42 +08:00
ibuler
4a9b1aff96 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-06 17:08:31 +08:00
ibuler
542e94ec9c perf: 修改翻译 2024-03-06 17:08:24 +08:00
fit2bot
9341558f61 perf: translate (#12764)
Co-authored-by: feng <1304903146@qq.com>
2024-03-06 16:51:07 +08:00
fit2bot
6c89349194 perf: 优化会话 命令记录 分片删除 (#12763)
Co-authored-by: feng <1304903146@qq.com>
2024-03-06 15:22:55 +08:00
jiangweidong
670eac49b6 perf: 优化oauth2登录未激活用户时,会重复跳转登录问题 2024-03-06 15:03:58 +08:00
feng
a7a099f290 perf: 支持配置文件配置限制的最大数量 2024-03-06 14:53:48 +08:00
feng
5157514c62 perf: 优化会话清理任务使用分片删除过期的会话和命令 2024-03-06 14:50:19 +08:00
jiangweidong
533d2ab98a perf: 优化自定义短信测试总是成功的问题 2024-03-06 14:32:58 +08:00
ibuler
6ea13b2c0d perf: 修改翻译 2024-03-05 19:01:44 +08:00
wangruidong
40730b741d fix: 个别页面搜索不生效的问题 2024-03-05 11:21:20 +08:00
ibuler
e57512f4fe perf: 添加配置支持 Lite 2024-03-04 19:18:26 +08:00
ibuler
348f67f4a4 Merge branch 'v4' of github.com:jumpserver/jumpserver into v4 2024-03-04 15:46:18 +08:00
ibuler
83bdf07600 perf: 修改翻译 2024-03-04 15:42:14 +08:00
fit2bot
dfe4eddbbc perf: translate (#12746)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-03-04 14:44:19 +08:00
ibuler
1caed59f76 merge: with remote 2024-03-04 14:03:05 +08:00
Bai
6db4e88a2c perf: 更新 poetry.lock 文件 2024-03-04 11:32:04 +08:00
halo
786cb23f98 perf: 优化ansible_winrm执行超时时间 2024-03-01 17:02:48 +08:00
fit2bot
133daeb664 perf: translate (#12739)
Co-authored-by: feng <1304903146@qq.com>
2024-03-01 15:42:21 +08:00
fit2bot
518ae3fa09 perf: 自动化资产探活支持Telnet方式 (#12728)
Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2024-03-01 15:05:34 +08:00
ibuler
18707d365b perf: 优化标签搜索资产使用的关系 2024-03-01 15:05:01 +08:00
wangruidong
a4a8d1ecf0 perf: modify menu translate 2024-03-01 13:53:29 +08:00
Bryan
7ba24293d1 Merge pull request #12736 from jumpserver/pr@dev@master_fix
fix: 解决冲突
2024-02-29 16:38:43 +08:00
Bai
f10114c9ed fix: 解决冲突 2024-02-29 16:37:10 +08:00
Bryan
cf31cbfb07 Merge pull request #12729 from jumpserver/dev
v3.10.4
2024-02-29 16:19:59 +08:00
feng
f0ffa2408d fix: 哨兵redis 密码里有@ 无法连接 2024-02-29 16:19:33 +08:00
jiangweidong
b557e264bc fix: 账号备份选择SFTP有多个时,重复编码password会导致任务异常 2024-02-29 16:10:21 +08:00
ibuler
88a08a74f7 perf: 修改翻译 2024-02-29 14:57:38 +08:00
wangruidong
457d2b2359 fix: 作业管理资产根据标签过滤获取不对 2024-02-28 15:50:46 +05:00
feng
c9e12a3027 perf: Modify some translations 2024-02-28 18:23:10 +08:00
fit2bot
82aa4a65ab perf: account translate (#12723)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-02-28 17:32:29 +08:00
ibuler
d46237f1bf merge: with remote 2024-02-28 16:32:46 +08:00
ibuler
1744f94910 perf: 修改翻译 2024-02-28 16:27:41 +08:00
Bai
8ebc99339b perf: 更新 poetry.lock 文件 2024-02-28 07:22:16 +05:00
wangruidong
e71e335f5c fix: 终断任务时接口报错 2024-02-27 16:22:06 +05:00
Bai
e308812429 perf: i18n settings-Security done. 2024-02-27 19:20:48 +08:00
fit2bot
2328ef0b0c perf: account translate (#12719)
Co-authored-by: feng <1304903146@qq.com>
2024-02-27 19:17:40 +08:00
Bai
000c5770f2 perf: i18n settings-RemoteApp done. 2024-02-27 17:13:59 +08:00
Bai
9e1a3598ab perf: i18n settings-Components done. 2024-02-27 16:43:44 +08:00
Bai
7268f60343 perf: i18n settings-Storage done. 2024-02-27 14:59:22 +08:00
Bai
c8b274031f perf: i18n settings-Auth done. 2024-02-27 11:25:42 +08:00
masix
7517e77af9 指定lxml版本为4.9.3
修复SAML2认证回调/core/auth/saml2/callback/时偶发出现http 502错误
2024-02-27 08:16:10 +05:00
wangruidong
889cdca3b0 fix: 操作日志资源类型搜索无效 2024-02-26 16:36:05 +05:00
wangruidong
4cfd1bc047 fix: 远程应用列表接口报错 2024-02-26 16:03:34 +05:00
Eric
fc0891ceee perf: 会话生命周期日志翻译 2024-02-26 15:33:11 +05:00
feng
cea16fc41f perf: 命令上传 取消input长度限制 2024-02-26 14:29:13 +05:00
fit2bot
4b7c0b8437 perf: 用户列表翻译超级管理员,组织管理员 2024-02-26 14:27:19 +05:00
Bai
10394dbb1c perf: i18n settings-Auth done. 2024-02-26 16:53:40 +08:00
Bai
859bb91fc7 perf: i18n settings-Features done. 2024-02-26 15:47:05 +08:00
fit2bot
09432b01a7 fix: 自动化任务密钥为 None 报错 (#12709)
Co-authored-by: feng <1304903146@qq.com>
2024-02-26 14:47:19 +08:00
wangruidong
d7f8ba58ad perf: 作业日志添加任务类型 2024-02-26 13:43:49 +08:00
fit2bot
0fd0d33704 perf: i18n settings-notifications done. (#12702)
Co-authored-by: Bai <baijiangjie@gmail.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2024-02-23 18:09:18 +08:00
fit2bot
ad0f489834 perf: translate (#12701)
Co-authored-by: feng <1304903146@qq.com>
2024-02-23 17:52:16 +08:00
fit2bot
b1fa870de7 perf: 工作台相关翻译 (#12700)
Co-authored-by: feng <1304903146@qq.com>
Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
2024-02-23 17:22:47 +08:00
Bai
7c5e2ae8ea perf: i18n settings-org done. 2024-02-23 15:17:17 +08:00
Bai
c0e4065a45 perf: i18n settings-basic done. 2024-02-23 14:31:09 +08:00
吴小白
f660c38d80 fix: 添加 psycopg2 缺失依赖 2024-02-22 19:08:18 +08:00
fit2bot
35448eea9f perf: 翻译 (#12690)
Co-authored-by: feng <1304903146@qq.com>
2024-02-22 17:46:12 +08:00
wangruidong
edf0630cef fix: 用户列表导出优化 2024-02-22 17:44:56 +08:00
wangruidong
430f45a3ec perf: permissions i18n modify 2024-02-22 17:36:45 +08:00
Bai
71b6fd5326 perf: 修改翻译 2024-02-22 17:29:46 +08:00
wangruidong
c4342567ba fix: 远程应用README国际化 2024-02-22 16:11:43 +08:00
fit2bot
d4e53be7ce perf: 修改core celery 组件状态 (#12684)
Co-authored-by: feng <1304903146@qq.com>
2024-02-22 14:47:26 +08:00
wangruidong
d4721e90d5 fix: LDAP用户导入会超时 2024-02-22 11:37:30 +08:00
jiangweidong
bb6c6c8f6a perf: jms-storage==0.0.56 2024-02-22 11:36:33 +08:00
wangruidong
251db733b2 perf: i18n modify 2024-02-22 10:30:15 +08:00
fit2bot
753ab77c46 perf: 关闭页面等待ws的最大重连时间改为6秒 (#12677)
Co-authored-by: feng <1304903146@qq.com>
2024-02-21 17:51:06 +08:00
jiangweidong
ba127c506d feat: 支持工单链接直接免密审批 2024-02-21 11:39:01 +08:00
ibuler
d799725b8a perf: 修改翻译 2024-02-20 19:01:32 +08:00
fit2bot
c21ca70158 perf: 账号收集添加资产名称模糊搜索 (#12673)
Co-authored-by: feng <1304903146@qq.com>
2024-02-20 18:42:11 +08:00
wangruidong
135fb7c6f9 perf: 终断批量快捷命令执行的任务 2024-02-20 15:09:39 +08:00
feng
f592f19b08 perf: 自动化任务按优先级默认排序 2024-02-19 18:19:14 +08:00
fit2bot
dce68cd011 perf: 授权用户不显示组件用户 (#12664)
Co-authored-by: feng <1304903146@qq.com>
2024-02-19 14:48:31 +08:00
fit2bot
d7b1903fb7 perf: 修改登录页面定期 check 的时间 (#12660)
Co-authored-by: feng <1304903146@qq.com>
2024-02-19 10:57:40 +08:00
feng
6e506e3146 fix: 【登录超时】修复登录页面提示 <登录超时,请重新登录> 问题 2024-02-19 10:21:13 +08:00
fit2bot
58d30e7f85 perf: 记录会话活动日志 (#12523)
* perf: 更新会话生命周期日志

* perf: 优化错误原因

* perf: 增加错误类型

---------

Co-authored-by: Eric <xplzv@126.com>
2024-02-06 18:28:31 +08:00
ibuler
9d80aed468 perf: 修改一些翻译 2024-02-06 15:51:39 +08:00
wangruidong
2062778ab8 fix: 资产登录未发送提醒 2024-02-06 15:24:41 +08:00
wangruidong
eaca296bd0 perf: 支持改密日志记录保留天数 2024-02-05 18:09:45 +08:00
Bai
1051c6af04 fix: 修复用户登录后仪表盘显示403的问题(用户在非Default组织下是组织管理员权限) 2024-02-05 16:52:09 +08:00
老广
96f92f0908 Merge pull request #12643 from jumpserver/pr@v4@perf_i18n
perf: 优化翻译
2024-02-05 14:18:48 +08:00
ibuler
314e4301f3 perf: 修改翻译 2024-02-05 14:13:07 +08:00
wangruidong
aa69353474 perf: 支持远程应用描述文案的国际化 2024-02-05 10:46:47 +08:00
ibuler
b284bb60f5 merge: with dev 2024-02-05 09:49:43 +08:00
ibuler
f99396ec50 perf: 修改翻译 2024-02-04 19:31:51 +08:00
jiangweidong
d1f31f078b perf: 账号支持批量更新 2024-02-04 17:28:31 +08:00
ibuler
be80663436 perf: 优化日志显示避免太长 2024-02-04 17:23:37 +08:00
wangruidong
1ae363d6bd perf: MFA认证App支持自定义下载二维码 2024-02-04 17:19:04 +08:00
fit2bot
31b0d345ad perf: 使用新的钉钉登录接口 (#12635)
* perf: 暂存

* perf: 使用新的钉钉登录接口

---------

Co-authored-by: halo <wuyihuangw@gmail.com>
2024-02-04 17:05:11 +08:00
Bai
cabda0a32f perf: 修改依赖 2024-02-04 17:02:07 +08:00
ibuler
886cf6ed1f perf: 暂存 2024-02-04 16:46:33 +08:00
wangruidong
f606dd8920 perf: 增加国际电话区号选择 2024-02-04 14:52:15 +08:00
wangruidong
973df0360c fix: 控制台-仪表盘会话用户,资产排名不对 2024-02-04 11:42:58 +08:00
wangruidong
f9f1d96674 fix: 资产过期消息提示发送失败 2024-02-04 11:42:15 +08:00
wangruidong
0edad24d5d fix: 资产过期消息提示发送失败 2024-02-04 11:41:48 +08:00
ibuler
74dd6e97a2 perf: 优化翻译 2024-02-04 10:23:54 +08:00
feng
8cb74976e1 perf: 优化用户session 会话过期 2024-02-02 17:52:50 +08:00
fit2bot
46fde2f1aa perf: 整合翻译 (#12630)
* stash

* stash

* perf: 整合翻译

* perf: 整理了一遍

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-02-01 16:02:31 +08:00
wangruidong
279109c9a6 perf: 使用winrm协议批量上传文件 2024-01-30 11:12:24 +08:00
jiangweidong
8c7ba4a497 perf: 优化工单审批时间不准确问题 2024-01-29 16:40:03 +08:00
feng
9cc048267b feat: 批量测试账号可连接性 2024-01-29 16:39:24 +08:00
wangruidong
78d0e3f485 perf: 使用winrm协议执行快捷命令 2024-01-29 11:21:30 +08:00
wangruidong
8aefacd7ed perf: 安全模式返回授权的资产 2024-01-25 17:07:37 +08:00
ibuler
ef8db68db1 perf: 优化组织刷新资源 2024-01-25 14:48:15 +08:00
fit2bot
00256f86df perf: OAuth2协议获取token支持配置json或者data (#12602)
* perf: OAuth2协议获取token支持配置json或者data

* perf: 优化注释

---------

Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2024-01-25 14:00:13 +08:00
ibuler
77569c554b perf: 去掉资产查询的默认排序 2024-01-25 13:49:49 +08:00
jiangweidong
7897462e32 perf: jms_storage==0.0.55 2024-01-25 13:48:34 +08:00
Bai
aee11827c4 feat: 修改 jms-storage 0.0.55 2024-01-25 11:48:16 +08:00
fit2bot
a6bf592046 perf: 翻译 (#12600)
Co-authored-by: feng <1304903146@qq.com>
2024-01-24 19:50:05 +08:00
Bryan
1dea424104 Revert "fix: 修复 OAuth2 认证时 POST 方式获取 access_token API 使用 json 传递数据" 2024-01-24 18:23:29 +08:00
Bai
1f5554d945 fix: 修复 OAuth2 认证时 POST 方式获取 access_token API 使用 json 传递数据 2024-01-24 16:53:11 +08:00
ibuler
0303408be8 perf: 优化授权树的刷新,同步解决同步异步的问题 2024-01-24 16:44:19 +08:00
fit2bot
f5802ace02 fix: oracle 用户是sysdba类型的 改密推送 验证账号可连接性失败 (#12596)
Co-authored-by: feng <1304903146@qq.com>
2024-01-24 16:39:43 +08:00
fit2bot
8bde45d9dc perf: 改密添加最后汇总信息 (#12595)
Co-authored-by: feng <1304903146@qq.com>
2024-01-24 16:20:44 +08:00
ibuler
e8bbc44647 perf: 优化授权的资产,速度快 10 倍 2024-01-24 16:00:18 +08:00
ibuler
34aa48d18c fix: 修复定时检测用户是否活跃任务无法执行的问题 2024-01-23 09:29:00 +00:00
ibuler
1f1c1a9157 fix: 修复定时检测用户是否活跃任务无法执行的问题 2024-01-23 09:28:38 +00:00
jiangweidong
7aa6613e69 perf: 更新jms-storage版本 2024-01-23 03:42:59 +00:00
fit2bot
503034299e fix: windows 收集账号 收集失败 (#12583)
Co-authored-by: feng <1304903146@qq.com>
2024-01-23 11:07:56 +08:00
feng
6c9d271ae1 fix: redis 密码有特殊字符celery beat启动失败 2024-01-22 06:18:34 +00:00
Bai
6ff852e225 perf: 修复 Count 时没有去重的问题 2024-01-22 06:16:25 +00:00
fit2bot
0c74e92bfb perf: 优化 labels 在 json field 中的筛选 (#12577)
* perf: 优化 labels 在 json field 中的筛选

* perf: 修改 labels 搜索

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-01-21 23:36:18 -04:00
wangruidong
3853d0bcc6 fix:绑定的端点Default下载RDP文件中的地址是空的 2024-01-19 10:38:52 +00:00
feng
cd0348cca1 perf: 优化任务列表执行时间 性能快了10倍 2024-01-19 10:33:41 +00:00
Eric
ce94348d45 perf: ignore some err 2024-01-19 12:56:46 +08:00
Eric
f74f8b7d8c perf: 优化 delay_run 执行 2024-01-19 12:56:46 +08:00
Bai
dc79346bdc perf: 修复 Count 时没有去重的问题 2024-01-19 12:54:14 +08:00
wangruidong
37a0d831da perf:ldap sync add no user msg 2024-01-18 10:31:53 +00:00
feng
e509568fe5 fix: redis 密码有特殊字符celery beat启动失败 2024-01-18 10:30:00 +00:00
Bryan
baa75dc735 Merge pull request #12566 from jumpserver/master
v3.10.2
2024-01-17 07:34:28 -04:00
Bryan
8a9f0436b8 Merge pull request #12565 from jumpserver/dev
v3.10.2
2024-01-17 07:23:30 -04:00
fit2bot
2c2c3eb21a perf: 翻译 (#12564)
Co-authored-by: feng <1304903146@qq.com>
2024-01-17 19:18:00 +08:00
fit2bot
18681d1f50 perf: 连接k8s 添加错误处理 (#12563)
Co-authored-by: feng <1304903146@qq.com>
2024-01-17 18:41:29 +08:00
feng
86ef984c02 perf: 查看授权用户 不展示组件用户 2024-01-17 03:13:39 -07:00
feng
e4d8ce097a fix: 创建资产失败 2024-01-17 18:05:30 +08:00
Eric
ae68241812 perf: 修复录像在线播放问题 2024-01-17 00:02:00 -07:00
fit2bot
e2a3c360ea perf: 修改一次性翻译长度 (#12557)
Co-authored-by: feng <1304903146@qq.com>
2024-01-17 11:38:58 +08:00
fit2bot
9968617758 perf: 修改优化结构 (#12554)
* perf: 修改优化结构

* perf: 修改结构

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-01-17 11:08:39 +08:00
feng
13d4177531 fix: 工单批量更新没有权限 2024-01-16 20:01:36 -07:00
feng
1cec27ed70 perf: 添加进度条 2024-01-17 10:36:45 +08:00
feng
641e75a905 fix: 用户组列表 用户数量不准确 2024-01-16 02:19:36 -07:00
feng
f0dfff0625 feat: gpt translate 2024-01-16 16:19:37 +08:00
ibuler
a2d6e41816 perf: labels getter and setter for inherite model 2024-01-16 15:00:46 +08:00
wangruidong
6cd3672604 fix: sync LDAP notification error 2024-01-15 23:08:55 -07:00
Bai
3c3c1499b7 perf: Add requirement for exchangelib==5.1.0 2024-01-15 22:55:58 -07:00
fit2bot
e29e51121d perf: 优化账号版本计算策略 (#12547)
Co-authored-by: feng <1304903146@qq.com>
2024-01-16 11:33:21 +08:00
ibuler
fabee37e9e fix: user permed type tree recurse root node 2024-01-15 19:50:14 +08:00
ibuler
2994ea6f68 perf: revert asset labels api 2024-01-15 19:49:55 +08:00
fit2bot
fdaec3c959 perf: Modify i18n for settings module. (#12543)
Co-authored-by: Bai <baijiangjie@gmail.com>
2024-01-15 04:41:50 -07:00
ibuler
fcb4c6a972 perf: Add sort json script 2024-01-15 17:12:13 +08:00
ibuler
513974bbed perf: remove some category 2024-01-15 16:38:16 +08:00
halo
644eada8a1 fix: 解决openssh低版本时测试可连接失败问题 2024-01-15 10:39:34 +08:00
wangruidong
000a3038e1 fix: 终端输入错误的MFA无日志记录 2024-01-14 18:32:33 -08:00
ibuler
9c8635b230 perf: 优化授权资产 api,很多资产也不怕 2024-01-14 18:30:57 -08:00
wangruidong
e428eb351b feat: 同步ldap用户消息通知 2024-01-12 11:17:23 +05:00
fit2bot
1275087f19 perf: 添加LC_ALL环境变量C.UTF-8 解决ansible无法初始化首选语言环境问题 (#12530)
Co-authored-by: feng <1304903146@qq.com>
2024-01-12 11:21:27 +08:00
feng
311c01242b fix: 分页后排序失效 2024-01-12 10:18:05 +08:00
ibuler
bab5b67c52 fix: 修复自定义 applet 导入的 bug 2024-01-11 15:41:10 +05:00
ibuler
00d6effd69 pref: stash 2024-01-11 18:33:52 +08:00
fit2bot
3eb0b768a6 fix: 改密账号更新日期没有更新 (#12524)
Co-authored-by: feng <1304903146@qq.com>
2024-01-11 16:57:23 +07:00
ibuler
c06c68d5da perf: 统一翻译 2024-01-11 14:40:44 +08:00
fit2bot
6dcc74a388 fix: 账号备份只导出一条记录 (#12517)
Co-authored-by: wangruidong <940853815@qq.com>
2024-01-10 18:52:45 +08:00
ibuler
2b15fc5e8b perf: 兼用处理一下 tree 2024-01-10 11:23:16 +05:00
wangruidong
df655f304a fix: 登录日志不显示 2024-01-10 11:21:29 +05:00
Bai
25223719cb perf: 支持配置 RADIUS_ATTRIBUTES 属性 2024-01-09 18:36:16 +08:00
jiangweidong
814dbeb749 fix: 解决手机号加密导致忘记密码判断总是失败问题 2024-01-08 16:24:28 +05:00
jiangweidong
630bb56601 fix: 解决手机号加密导致忘记密码判断总是失败问题 2024-01-08 16:24:28 +05:00
ibuler
496b72aaee perf: 优化导入错误 2024-01-08 17:44:49 +08:00
吴小白
b57e943990 build(deps): 更新依赖版本 2024-01-08 17:03:08 +08:00
jiangweidong
b4c1dd2944 perf: slack消息解析优化-mistune升级 2024-01-08 12:35:26 +05:00
jiangweidong
9ede3670a7 perf: 邮箱支持exchange协议 2024-01-08 12:35:01 +05:00
Eric
2a29cd0e70 perf: 使用 nginx 处理静态资源 2024-01-03 17:20:14 +08:00
ibuler
15ac81a422 perf: 优化标签绑定,仅绑定到资产上 2024-01-03 17:08:15 +08:00
fit2bot
eb5a53b91b perf: 翻译 (#12487)
Co-authored-by: feng <1304903146@qq.com>
2024-01-03 11:25:45 +08:00
feng
4dd72b109f feat: 历史账号定期删除 可设置保留数量 2024-01-03 07:52:24 +05:00
fit2bot
2fcbfe9f21 perf: 优化 tree nodes 避免太慢 (#12472)
* perf: 优化 tree nodes 避免太慢

perf: 优化大量资产上的资产数生成比较慢

perf: 优化节点树

perf: 修改 tree nooooooooodes

perf: 优化一些 api 比较大的问题

perf: 优化平台 api

perf: 分页返回同步树

perf: 优化节点树

perf: 深度优化节点树

* perf: remove unused config

---------

Co-authored-by: ibuler <ibuler@qq.com>
2024-01-02 16:11:56 +08:00
wangruidong
e80a0e41ba fix: 同步LDAP用户时,用户组只移除LDAP同步过来的 2024-01-02 12:04:25 +05:00
吴小白
7cdba3ef38 build(deps): bump pyfreerdp from 0.0.1 to 0.0.2 2024-01-02 08:13:28 +05:00
feng
2d6e815b3d fix: 如 Redis密码信息包含特殊字符时,服务启动失败 2024-01-02 08:11:12 +05:00
Bryan
38642024be Update README.md (#12463) 2023-12-29 16:23:02 +08:00
faming.zhou
257ee205ac fix: UNION 的类型 character varying 和 uuid 不匹配 2023-12-29 12:14:31 +05:00
Bryan
a9620a3cbe Merge pull request #12461 from jumpserver/master
v3.10.1
2023-12-29 11:33:05 +05:00
Bryan
769e7dc8a0 Merge pull request #12460 from jumpserver/dev
v3.10.1
2023-12-29 11:20:36 +05:00
feng
4b961a626b perf: 用户组列表中的用户添加 is_service_account 属性 2023-12-29 11:11:19 +05:00
Bryan
2a70449411 Merge pull request #12458 from jumpserver/dev
v3.10.1
2023-12-29 11:01:13 +05:00
wangruidong
653a6752b6 fix: 用户组删除用户权限问题 2023-12-29 13:36:39 +08:00
wangruidong
32255c6077 fix: 更新用户组权限问题 2023-12-29 07:42:10 +05:00
feng626
7a708156ee Revert "fix: 特定key paramiko 测试可连接性失败"
This reverts commit a4d0e3fd17.
2023-12-28 14:34:42 +05:00
Bai
b72a446bbd fix: 修复label关联用户时不显示服务账号 2023-12-28 14:21:38 +05:00
feng
219fad9b62 fix: 账号备份密码如 t08\x08fIE 备份失败 2023-12-28 13:53:57 +05:00
Bai
6c1c8b241e perf: 优化资产管理中的标签权限位不显示 2023-12-28 15:27:20 +08:00
feng
a4d0e3fd17 fix: 特定key paramiko 测试可连接性失败 2023-12-27 13:13:03 +05:00
fit2bot
af44ffab0a fix: 资产账号不存在时 同步删除资产账号任务报错 (#12437)
Co-authored-by: feng <1304903146@qq.com>
2023-12-27 14:39:11 +08:00
fit2bot
a09b7b29e2 fix: 【账号收集】账号收集任务,关闭同步到资产时,只收集了一个资产的账号,其他资产的账号未收集 (#12428)
Co-authored-by: feng <1304903146@qq.com>
2023-12-26 16:05:28 +08:00
wangruidong
8f67922c80 perf: 资产登录提醒和用户登录提醒能显示用户名称 2023-12-26 12:54:28 +05:00
feng
f1db5d6f44 perf: 重写GenericForeignKey 2023-12-26 12:51:09 +05:00
fit2bot
33ea5eb41f perf: 资产可以通过address 排序 (#12427)
Co-authored-by: feng <1304903146@qq.com>
2023-12-26 14:23:04 +08:00
fit2bot
48bcbc6c53 perf: 翻译 (#12426)
Co-authored-by: feng <1304903146@qq.com>
2023-12-26 14:16:11 +08:00
Bai
3e090eb701 fix: 修复 连接远程应用时标签匹配失败的问题 2023-12-25 16:20:38 +05:00
Bai
6ac956c626 fix: 修复 api/docs 报错问题 2023-12-25 19:04:44 +08:00
wangruidong
edb2d1bd7b fix: 我的资产列表标签信息没有显示 2023-12-25 16:02:16 +05:00
feng
81b4909016 fix: 【用户登录会话失效问题】SESSION_COOKIE_AGE 配置不生效的问题 2023-12-25 13:10:58 +05:00
wangruidong
f6f1be423c perf: 统计任务执行结果 2023-12-22 14:18:25 +05:00
Bryan
fae5392a03 Update README.md 2023-12-22 12:30:11 +05:00
Bryan
d5224968bc Update README.md 2023-12-22 12:30:11 +05:00
feng
6565f8c0a8 perf: 在 ansible 中切换用户时 添加超时操作 2023-12-22 12:23:19 +05:00
Bryan
8df720f19e Merge pull request #12401 from jumpserver/dev
v3.10
2023-12-21 15:14:19 +05:00
ibuler
bc5494bbb0 perf: 优化 label choice 2023-12-21 16:51:36 +08:00
fit2bot
febf08629a fix: 翻译 (#12400)
Co-authored-by: feng <1304903146@qq.com>
2023-12-21 16:15:20 +08:00
fit2bot
b6774aa749 perf: 更新全局组织名字 添加唯一性校验 (#12399)
Co-authored-by: feng <1304903146@qq.com>
2023-12-21 16:07:11 +08:00
fit2bot
bc668f3e9f fix: applet 压缩包名字(1).zip时 上传失败} (#12397)
Co-authored-by: feng <1304903146@qq.com>
2023-12-21 15:42:09 +08:00
fit2bot
dc56b019b1 perf: 权限树翻译 (#12396)
Co-authored-by: feng <1304903146@qq.com>
2023-12-21 15:00:46 +08:00
ibuler
a38624d198 perf: 修改同名账号登录报错 2023-12-21 14:04:09 +08:00
ibuler
ca026040fe perf: 优化导入账号报错 2023-12-21 12:40:59 +08:00
ibuler
88b9a4d693 perf: 修改搜索 2023-12-20 17:50:40 +05:00
ibuler
4d15e46ceb perf: 修改搜索 2023-12-20 17:50:40 +05:00
fit2bot
55575e9f7f perf: 用户账号导出去除is_service_account (#12388)
Co-authored-by: feng <1304903146@qq.com>
2023-12-20 19:24:09 +08:00
wangruidong
98c9cddcbf fix: es命令记录可以看到其他资产执行的命令 2023-12-20 16:00:35 +05:00
fit2bot
9f67ba573c perf: dockerfile 添加 freerdp2-dev 依赖 (#12386)
Co-authored-by: feng <1304903146@qq.com>
2023-12-20 18:48:37 +08:00
fit2bot
533f13c634 perf: 优化创建账号密码校验逻辑 (#12383)
Co-authored-by: feng <1304903146@qq.com>
2023-12-20 16:35:36 +08:00
fit2bot
c66b1db784 fix: 自动化任务网关连接数 自定义ansible rdp 测试可连接性端口错误 (#12373)
Co-authored-by: feng <1304903146@qq.com>
2023-12-20 16:02:13 +08:00
Eric
d03ba7c391 perf: 页面配置是否启用 Vitual App 2023-12-20 13:01:50 +05:00
fit2bot
6544f8ade8 perf: 修改 labels 搜索 (#12379)
* perf: 修改标签的搜索

* perf: 修改 labels 搜索

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-12-20 14:31:03 +08:00
ibuler
ac5991fc43 perf: 修改标签的搜索 2023-12-20 10:57:58 +05:00
wangruidong
9b2b71dddc fix: 工单列表类型没有翻译 2023-12-20 10:57:29 +05:00
fit2bot
e18e019460 fix: 账号列表,添加账号模版 500 (#12375)
Co-authored-by: feng <1304903146@qq.com>
2023-12-20 11:05:42 +08:00
fit2bot
ef1875d9b5 perf: 优化工单显示 (#12368)
Co-authored-by: wangruidong <940853815@qq.com>
2023-12-19 19:06:39 +08:00
ibuler
0b7552a6ee perf: 修改 labels 绑定引起的问题 2023-12-19 16:06:05 +05:00
fit2bot
45425b11d2 perf: 优化 labels 支持多个搜索 (#12367)
Co-authored-by: ibuler <ibuler@qq.com>
2023-12-19 18:46:02 +08:00
jiangweidong
fda3e6ec9b perf: model_to_dict无法转换不可编辑字段,导致消息中有的值为None 2023-12-19 14:30:13 +05:00
huailei
2b41486f2a Merge pull request #12369 from jumpserver/pr@dev@chat_ai_test
fix: chatAI代理配置错误,服务器报错500
2023-12-19 15:42:06 +08:00
feng
59d9a3d4ec fix: chatAI代理配置错误,服务器报错500 2023-12-19 15:39:22 +08:00
wangruidong
3c7ba029dd perf: 工单显示优化 2023-12-19 12:10:34 +05:00
huailei
1335556272 Merge pull request #12366 from jumpserver/pr@dev@command
fix: 命令组模糊搜索,500
2023-12-19 15:07:50 +08:00
feng
8eab87f40d fix: 命令组模糊搜索,500 2023-12-19 15:05:35 +08:00
huailei
c441e5bb92 Merge pull request #12365 from jumpserver/pr@dev@ansible
fix: 修复ansible 任务 {{123}} 这样的密码失败问题
2023-12-19 14:59:23 +08:00
feng
da8d78f384 fix: 修复ansible 任务 {{123}} 这样的密码失败问题 2023-12-19 14:57:51 +08:00
jiangweidong
83b91cb739 perf: 优化命令禁止发送消息时,slack消息会包含html标签内容 2023-12-19 11:40:18 +05:00
fit2bot
1afad40dd3 perf: 优化 labels 绑定资源 (#12361)
* perf: 优化 labels 绑定资源

* perf: 优化 labels list 显示

* perf: add migrations

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-12-19 10:20:11 +08:00
ibuler
1358cf532f perf: 修改 labels 和 role 搜索 2023-12-18 18:23:06 +05:00
huailei
1e7f268f0c Merge pull request #12360 from jumpserver/pr@dev@translate
perf: 翻译
2023-12-18 18:38:21 +08:00
feng
d6b5590505 perf: 翻译 2023-12-18 18:36:44 +08:00
huailei
79b3b31492 Merge pull request #12358 from jumpserver/pr@dev@makemigrations
perf: 迁移文件
2023-12-18 17:46:23 +08:00
feng
4f2b3fbb43 perf: 迁移文件 2023-12-18 17:44:59 +08:00
fit2bot
1f2db65dba fix: ansible 密码支持 {{ }} {% %} (#12354)
Co-authored-by: feng <1304903146@qq.com>
2023-12-18 17:31:35 +08:00
halo
006faac326 perf: 配置xpack后logo没有修改 2023-12-18 14:51:28 +08:00
ibuler
f7fee0f430 perf: 修复标签搜索 2023-12-15 18:34:44 +08:00
fit2bot
714c44fbf4 perf: 授权创建时 通过模版创建账号 给账号添加来源 (#12345)
Co-authored-by: feng <1304903146@qq.com>
2023-12-15 18:28:48 +08:00
fit2bot
84b316e2c1 fix: 修复自动禁用用户默认排除 admin 用户 (#12346)
Co-authored-by: Bai <baijiangjie@gmail.com>
2023-12-15 18:28:24 +08:00
wangruidong
6955a3db11 perf: ldap测试登录提示优化&上产文件名长度限制 2023-12-15 18:06:47 +08:00
huailei
d92736e624 Merge pull request #12343 from jumpserver/pr@dev@perf_password_rules
perf: 优化校验密码规则 特殊字符校验
2023-12-15 17:16:04 +08:00
feng
9d0da64ea1 perf: 优化校验密码规则 特殊字符校验 2023-12-15 17:14:34 +08:00
wangruidong
b9e1d6093e perf: 翻译 2023-12-15 15:21:52 +08:00
Bai
c3820b30b8 fix: 修复远程应用连接 labels 过滤问题 2023-12-15 13:26:01 +08:00
huailei
6955fc1734 Merge pull request #12337 from jumpserver/pr@dev@prompt
perf: 修改默认prompt顺序
2023-12-15 10:57:18 +08:00
feng
32178b2344 perf: 修改默认prompt顺序 2023-12-15 10:48:04 +08:00
fit2bot
e3c0518cfb perf: 上传目标目录指定在/tmp下 (#12334)
Co-authored-by: wangruidong <940853815@qq.com>
2023-12-14 19:44:53 +08:00
jiangweidong
438e9dee2a fix: 解决第三方登录一个不存在的本地用户时,改密日志会增加的问题 2023-12-14 19:36:06 +08:00
Bai
3c9239eb09 fix: 修复 Release 应用账号的逻辑,解决首次连接远程应用可能出现没有可用账号的问题 2023-12-14 19:35:05 +08:00
Eric
81fb080c67 perf: 调整搜索字段 2023-12-14 18:28:55 +08:00
feng
6cf05435bf feat: chat prompt 2023-12-14 17:39:15 +08:00
wangruidong
65718c5a84 perf: 接口返回上传文件大小限制 2023-12-14 11:26:44 +08:00
wangruidong
27daebbe1b perf: 上传文件大小限制 2023-12-14 10:34:58 +08:00
huailei
dce1079fdc Merge pull request #12324 from jumpserver/pr@dev@perm_label
perf: 修改下线用户会话的权限位label
2023-12-13 17:39:15 +08:00
feng
d07db68426 perf: 修改下线用户会话的权限位label 2023-12-13 17:28:57 +08:00
huailei
6d37300a30 Merge pull request #12323 from jumpserver/pr@dev@gather_account
fix: 收集账号过滤asset_id 失败
2023-12-13 16:35:17 +08:00
feng
0c96af32c2 fix: 手机账号过滤asset_id 失败 2023-12-13 16:33:50 +08:00
huailei
1c6b1b0625 Merge pull request #12321 from jumpserver/pr@dev@translate
perf: 翻译
2023-12-13 16:16:50 +08:00
feng
4f7b4842f6 perf: 翻译 2023-12-13 16:15:34 +08:00
fit2bot
c4fef5899c perf: 连接 RDP 协议会话时,高级选项支持 session bpp:i 参数配置;默认 32; (#12319)
Co-authored-by: feng <1304903146@qq.com>
2023-12-13 15:51:22 +08:00
wangruidong
5b51a8231c fix: 点击备案号未跳转到指定链接 2023-12-13 11:22:41 +08:00
huailei
54417dd6d3 Merge pull request #12312 from jumpserver/pr@dev@chat_setting
fix: chat ai测试可连接性时失败
2023-12-12 19:15:26 +08:00
feng
2c7ad90524 fix: chat ai测试可连接性时失败 2023-12-12 19:14:13 +08:00
ibuler
01fcdad489 perf: 优化用户不活跃检测 2023-12-12 17:19:19 +08:00
feng
8801003461 perf: 支持 西班牙 Keyboard Layout 2023-12-12 17:16:55 +08:00
huailei
696397fdb0 Merge pull request #12306 from jumpserver/pr@dev@translate
perf: 翻译
2023-12-12 15:37:37 +08:00
feng
87a24991f1 perf: 翻译 2023-12-12 15:34:13 +08:00
Eric
3ec93b8f04 perf: 添加录像不支持 2023-12-12 14:56:45 +08:00
ibuler
4f1826d3ed perf: get request ip, only using x-forwarded-for 2023-12-12 14:44:57 +08:00
ibuler
9260f26c99 perf: 优化 db constrains 2023-12-12 14:44:11 +08:00
fit2bot
93da3e58f2 perf: 【优化系统任务】支持显示 执行周期、下次开始时间 字段 (#12298)
Co-authored-by: feng <1304903146@qq.com>
2023-12-12 14:18:26 +08:00
wangruidong
1eff33f3f7 perf: 优化获取同名文件列表 2023-12-12 10:39:23 +08:00
wangruidong
8e89d42343 perf: 同名文件处理 2023-12-12 10:39:23 +08:00
wangruidong
d0b0c87d3c feat: 支持批量发送文件 2023-12-12 10:39:23 +08:00
ibuler
e3ac26e377 perf: 修改 rbac labels node 2023-12-11 14:43:15 +08:00
Eric
4ea20a9103 perf: 优化迁移文件 verbose_name 2023-12-11 14:40:21 +08:00
fit2bot
dd57b14562 feat: 增加 sqlserver 支持 (#12288)
* feat: 增加 sqlserver 支持

* feat: 删除一些  migrations

---------

Co-authored-by: Aaron3S <chenyang@fit2cloud.com>
2023-12-11 13:57:35 +08:00
wangruidong
c312cdb625 perf: 优化资产授权过期提示信息 2023-12-11 11:41:52 +08:00
huailei
85fedf0704 Merge pull request #12287 from jumpserver/pr@dev@public_api
perf: PublicSetting API 添加GPT参数
2023-12-08 17:54:06 +08:00
feng
8b05260a6c perf: PublicSetting API 添加GPT参数 2023-12-08 17:46:40 +08:00
Bai
47cb6b1ec0 perf: 优化资产列表支持通过 创建日期 进行排序 2023-12-08 16:39:13 +08:00
huailei
79b5dff210 Merge pull request #12286 from jumpserver/pr@dev@password_rule
fix: 改密计划创建更新失败
2023-12-08 16:36:04 +08:00
feng
b08e1f6a47 fix: 改密计划创建更新失败 2023-12-08 16:34:46 +08:00
Bai
2e3184cbd6 fix: 修复 Endpoint 获取错误问题 2023-12-08 16:33:27 +08:00
huailei
fb903e53a4 Merge pull request #12284 from jumpserver/pr@dev@translate
perf: 翻译
2023-12-08 16:18:36 +08:00
feng
cc7220a4ad perf: 翻译 2023-12-08 16:17:20 +08:00
fit2bot
81de527e32 perf: 解决Slack解绑用户404问题 (#12283)
Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2023-12-08 15:11:49 +08:00
huailei
7ad2abe104 Merge pull request #12280 from jumpserver/pr@dev@migrate
perf: 修改迁移文件
2023-12-08 14:22:55 +08:00
feng
9a2da98bd4 perf: 修改迁移文件 2023-12-08 14:21:10 +08:00
feng
eca50874f0 feat: 同步删除远程机器账号 2023-12-08 14:13:55 +08:00
fit2bot
8f82ca9856 perf: 优化操作日志 (#12249)
* perf: 优化操作日志

* perf: 修改migrations中关于Nodes的verbose_name

* perf: 优化代码逻辑

* perf: 优化日志详情展示逻辑

* perf: 代码优雅一下

---------

Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2023-12-05 17:26:47 +08:00
Eric
e193d7a942 perf: 完善 yaml 加载 2023-12-05 17:25:25 +08:00
fit2bot
d2429f7883 feat: 支持 virtual app (#12199)
* feat: 支持 virtual app

* perf: 增加 virtual host

* perf: 新增 virtual app 上传接口

* perf: 更名为 app provider

* perf: 优化代码

---------

Co-authored-by: Eric <xplzv@126.com>
2023-12-05 16:52:11 +08:00
ibuler
a43bb25b5a perf: 优化 applet 账号选择 2023-12-05 16:19:56 +08:00
ibuler
ffe3e8a70c perf: 优化 for tidb 2023-12-05 16:13:16 +08:00
ibuler
0e7e499a1e perf: 修改 labels 创建 2023-12-05 15:22:47 +08:00
ibuler
e812e3ff89 fix: 优化 endpoint 的 ipv6 支持 2023-12-05 14:56:05 +08:00
halo
d2eacad97b perf: 更新客户端 v2.1.0 2023-12-05 14:02:33 +08:00
fit2bot
8291a81efd perf: 支持全局的 labels (#12043)
* perf: 支持全局的 labels

* perf: stash

* stash

* stash

* stash

* stash

* perf: 优化 labels

* stash

* perf: add debug sql

* perf: 修改 labels

* perf: 优化提交

* perf: 优化提交 labels

* perf: 基本完成

* perf: 完成 labels 搜索

* perf: 优化 labels

* perf: 去掉不用 debug

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-12-05 11:16:34 +08:00
fit2bot
a91cb1afd5 feat: 系统设置可配置gpt (#12207)
* feat: 系统设置可配置gpt

* perf: 添加gpt的terminal config

---------

Co-authored-by: feng <1304903146@qq.com>
2023-12-05 10:58:19 +08:00
wangruidong
2cad97065f feat: 资产详情页面添加历史执行命令列表页面 2023-12-04 16:38:28 +08:00
fit2bot
cf18300360 fix: 添加Slack认证发送消息格式包 (#12229)
Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2023-11-30 14:38:43 +08:00
wangruidong
3cd22f05d2 perf: 优化工单处理提示消息页面 2023-11-30 10:15:26 +08:00
吴小白
eee41008cc perf: 优化 celery health 判断 2023-11-30 10:09:42 +08:00
fit2bot
0fdae00722 perf: 支持slack通知和认证 (#12193)
* perf: 支持slack通知和认证

* perf: 生成迁移文件

* perf: 优化获取access_token逻辑

---------

Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2023-11-29 17:45:44 +08:00
吴小白
575562c416 Merge pull request #12216 from jumpserver/pr@dev@patch_greenlet
build(deps): bump github.com/python-greenlet/greenlet from 2.0.2 to 3.0.1
2023-11-28 16:26:25 +08:00
吴小白
e2b7f67fdc build(deps): bump github.com/python-greenlet/greenlet from 2.0.2 to 3.0.1
Signed-off-by: 吴小白 <296015668@qq.com>
2023-11-28 16:14:48 +08:00
fit2bot
d2498c0d53 fix: sftp不能设置为默认存储 (#12213)
Co-authored-by: wangruidong <940853815@qq.com>
2023-11-28 15:21:40 +08:00
huailei
01e40fd238 Merge pull request #12211 from jumpserver/pr@dev@random
perf: 随机密码生成规则添加可排除字符选项
2023-11-28 14:49:35 +08:00
feng
370ef11486 perf: 随机密码生成规则添加可排除字符选项 2023-11-28 14:46:51 +08:00
ibuler
089cadeae3 perf: 优化 queryset count 2023-11-28 12:54:04 +08:00
wangruidong
6b748e5ac5 feat: 用户详情展示所有会话 2023-11-28 12:52:11 +08:00
fit2bot
6d611bbbbd feat: 作业中心数据库支持网域命令执行 (#12117)
Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
2023-11-27 11:22:34 +08:00
wangruidong
18670d493e perf: 优化工单处理提示消息页面 2023-11-27 11:14:27 +08:00
ibuler
ba38852354 perf: 优化跳转页 2023-11-24 17:00:39 +08:00
wangruidong
64f3509c8c feat: 支持备案配置 2023-11-24 13:55:47 +08:00
huailei
805c78c0de Merge pull request #12188 from jumpserver/pr@dev@perf_ldap_user_websocket
perf: ldap接口请求换成websocket连接
2023-11-23 15:09:15 +08:00
huailei
11accf8854 Merge pull request #12189 from jumpserver/pr@dev@translate
perf: 国际化翻译
2023-11-22 18:33:06 +08:00
feng
18f6ffe0ce perf: 国际化翻译 2023-11-22 18:30:56 +08:00
wangruidong
6b7119ea74 perf: ldap接口请求换成websocket连接 2023-11-22 16:56:31 +08:00
huailei
efc7ca1164 Merge pull request #12182 from jumpserver/pr@dev@translate
perf: 修改翻译
2023-11-22 11:12:45 +08:00
feng
a6de9bdde6 perf: 修改翻译 2023-11-22 11:09:16 +08:00
feng
6e7074ba40 fix: mysql 开始ssl后 再关闭测试失败 2023-11-20 15:38:53 +08:00
feng
2edcb2f2d3 fix: mysql 开启ssl 再关闭 测试可连接性失败 2023-11-20 10:52:23 +08:00
ibuler
07e1918fa1 perf: 优化延迟运行
fix: 延迟执行设置超时

perf: 修改 delay run

perf: 优化 delay_run 执行

perf: 修改 delay run
2023-11-20 10:29:51 +08:00
feng
452b383278 fix: redis 开启 ssl websocket连接失败 2023-11-20 10:23:21 +08:00
ibuler
ed92f10208 fix: 修复自动禁用非活跃用户任务 2023-11-17 15:41:16 +08:00
Chenyang Shen
e8331ca708 Merge pull request #12148 from jumpserver/pr@dev@fix_delete_debug_info
fix: 删除debug信息
2023-11-17 11:33:52 +08:00
Aaron3S
814130204a fix: 删除debug信息 2023-11-17 10:45:44 +08:00
吴小白
e7dc9a2f6f perf: 优化 Dockerfile 2023-11-17 10:39:17 +08:00
老广
dabbb45f6e Merge pull request #12144 from jumpserver/dev
v3.9.0
2023-11-16 18:23:05 +08:00
ibuler
ded1b4bba1 perf: 优化 api key 认证记录用户的时间 2023-11-16 18:17:22 +08:00
fit2bot
2630ea39a1 perf: windows 改密推送添加新的方式 最后测试可连接性的时候采用rdp的方式测试 (#12141)
Co-authored-by: feng <1304903146@qq.com>
2023-11-16 18:12:22 +08:00
Bryan
9e10029bdd Revert "fix: 修复平台自动化翻译 (#12078)" (#12138)
This reverts commit 69c0eb2f50.
2023-11-16 16:35:08 +08:00
Aaron3S
d1391cb5d5 fix: 修复 sqlserver 命令执行问题 2023-11-16 16:24:39 +08:00
Aaron3S
44f029774d fix: 修复playbook部分不可执行问题 2023-11-16 16:07:31 +08:00
fit2bot
23fce9e426 perf: 翻译 (#12135)
Co-authored-by: feng <1304903146@qq.com>
2023-11-16 15:35:34 +08:00
fit2bot
0778a39894 perf: 在线会话添加活跃状态过滤 (#12134)
Co-authored-by: feng <1304903146@qq.com>
2023-11-16 14:41:35 +08:00
fit2bot
9cc6d6a9af perf: dockerfile add libx11-dev (#12133)
Co-authored-by: feng <1304903146@qq.com>
2023-11-16 13:21:16 +08:00
fit2bot
8f309dee92 fix: 资产测试可连接性选错账号 (#12130)
Co-authored-by: feng <1304903146@qq.com>
2023-11-16 11:26:05 +08:00
Bai
d166b26252 perf: 优化处理telnet协议资产端点的端口问题 2023-11-16 11:13:37 +08:00
fit2bot
1ef51563b5 perf: account 迁移文件 (#12128)
Co-authored-by: feng <1304903146@qq.com>
2023-11-16 10:18:54 +08:00
老广
3e7b4682e4 Merge pull request #12124 from jumpserver/pr@dev@perf_device_icon
perf: 修改 tree 硬件设备的 icon
2023-11-15 17:02:05 +08:00
ibuler
994b42aa93 perf: 修改 tree 硬件设备的 icon 2023-11-15 17:00:12 +08:00
fit2bot
d6aea54722 fix: 账号收集未同步资产时 变更数据错误 (#12123)
Co-authored-by: feng <1304903146@qq.com>
2023-11-15 16:44:35 +08:00
ibuler
88afabdd1d perf: 设置 winrm 用户端不可以连接 2023-11-15 15:34:38 +08:00
fit2bot
b2327c0c5a fix: 账号改密 root密钥无法替换 (#12121)
Co-authored-by: feng <1304903146@qq.com>
2023-11-15 15:33:10 +08:00
Aaron3S
7610f64433 perf: 优化获取当前 python 执行路径的方式 2023-11-15 15:21:56 +08:00
fit2bot
b15c314384 fix: 资产多协议时 计算协议端口错误 (#12120)
Co-authored-by: feng <1304903146@qq.com>
2023-11-15 14:59:40 +08:00
wangruidong
7a5cffac91 fix: 对象存储下拉无法自动加载 2023-11-15 14:58:33 +08:00
feng
8667943443 fix: celery事物 数据库未保存 2023-11-14 19:42:21 +08:00
Aaron3S
7c51d90a3d fix: 修复快捷命令找不到mssql module 的问题 2023-11-14 19:28:46 +08:00
wangruidong
9996b200f9 fix: 作业执行历史日志未按配置天数清理 2023-11-14 19:22:14 +08:00
wangruidong
ae364ac373 fix: 录像存储下载报错 2023-11-14 19:21:33 +08:00
wangruidong
fef4a97931 fix: 作业日志筛选用户出错 2023-11-14 19:20:52 +08:00
fit2bot
d63c4d6cc4 fix: mysql 测试可连接性失败 (#12104)
Co-authored-by: feng <1304903146@qq.com>
2023-11-14 17:03:20 +08:00
fit2bot
4e5a44bd98 fix: 账号收集通知 同步资产时 计算新增账号错误 (#12101)
Co-authored-by: feng <1304903146@qq.com>
2023-11-14 14:50:33 +08:00
fit2bot
fcce03f7bd fix: 改密记录搜索失败 (#12098)
Co-authored-by: feng <1304903146@qq.com>
2023-11-14 12:48:02 +08:00
fit2bot
5f121934a7 perf: 交换机切换至卡住 (#12096)
Co-authored-by: feng <1304903146@qq.com>
2023-11-14 10:58:57 +08:00
fit2bot
521c1f0dfa perf: 修改授权动作翻译 (#12095)
Co-authored-by: feng <1304903146@qq.com>
2023-11-14 10:41:00 +08:00
ibuler
5673698a57 perf: 修改账号选择 2023-11-14 10:18:24 +08:00
fit2bot
d6b75ac700 perf: 修改默认 ansible_python_interpreter (#12093)
Co-authored-by: feng <1304903146@qq.com>
2023-11-13 18:09:09 +08:00
fit2bot
0ee14e6d85 perf: 修改翻译 (#12092)
Co-authored-by: feng <1304903146@qq.com>
2023-11-13 17:50:10 +08:00
wangruidong
9babe977d8 fix: 修改sftp账号备份文件名及任务日志提示 2023-11-13 17:05:21 +08:00
fit2bot
0f9223331c perf: 修改 m2m json filter (#12087)
* perf: 修改 m2m json filter

* perf: 修复 json 过滤问题

---------

Co-authored-by: ibuler <ibuler@qq.com>
2023-11-13 15:04:27 +08:00
fit2bot
f8a4a0e108 fix: 修复UserOtpDisableView 视图函数获取模版错误 (#12084)
Co-authored-by: feng <1304903146@qq.com>
2023-11-10 17:59:28 +08:00
ibuler
ba76f30af9 perf: 修改 applet option 2023-11-10 17:18:40 +08:00
Eric_Lee
e5e0c841a2 Revert "perf: 调整 secret 长度为32位"
This reverts commit c41fdf1786.
2023-11-10 15:27:57 +08:00
Eric
c41fdf1786 perf: 调整 secret 长度为32位 2023-11-10 15:03:51 +08:00
fit2bot
69c0eb2f50 fix: 修复平台自动化翻译 (#12078)
Co-authored-by: feng <1304903146@qq.com>
2023-11-09 17:25:32 +08:00
Bryan
e077afe2cc Update README.md 2023-11-09 14:53:49 +08:00
wangruidong
c1f572df05 fix: 【账号备份】创建账号备份存储,选择SFTP,发送服务器为空。修改执行任务的日志提示 2023-11-09 14:22:04 +08:00
fit2bot
d60fe464ca fix:修复es6.8查询不到数据问题 (#12069)
Co-authored-by: feng <1304903146@qq.com>
2023-11-09 14:18:49 +08:00
fit2bot
f47895b8a8 perf: 优化仪表盘查询sftp数量sql (#12075)
Co-authored-by: feng <1304903146@qq.com>
2023-11-09 14:16:41 +08:00
Eric
3eb1583c69 perf: 增加分享权限位 2023-11-08 19:05:51 +08:00
feng
5ab8ff4fde perf: 在线用户根据websocket添加用户是否活跃状态 2023-11-08 17:02:47 +08:00
feng
7746491e19 perf: 在线用户添加是否活跃的属性 2023-11-08 17:02:47 +08:00
Eric
5e54792d94 perf: 优化发布机终端名称 2023-11-08 13:53:24 +08:00
Eric
621c7a31fe fix: 修复发布机名称因含特殊字符部署失败的问题 2023-11-08 13:26:04 +08:00
fit2bot
75bab70ccf fix: 账号迁移文件 (#12059)
Co-authored-by: feng <1304903146@qq.com>
2023-11-08 10:33:49 +08:00
halo
30683ed859 perf: 优化连接信息超长,客户端拉起无响应问题 2023-11-07 15:47:22 +08:00
Bai
7c52cec5fb perf: Upgrade requements jms-storage-sdk==0.0.53 2023-11-07 15:46:48 +08:00
fit2bot
f01bfc44b8 perf: 账号备份增加sftp方式 (#12032)
* perf: 添加sftp支持

* perf: 账号备份增加sftp方式

---------

Co-authored-by: wangruidong <940853815@qq.com>
Co-authored-by: Bryan <jiangjie.bai@fit2cloud.com>
2023-11-07 15:10:46 +08:00
fit2bot
54b89f6fee feat: 账号收集添加资产账号信息变化通知 (#12009)
Co-authored-by: feng <1304903146@qq.com>
2023-11-07 13:00:09 +08:00
Bai
c0de0b0d8e fix: Remove repetition code 2023-11-07 11:30:53 +08:00
huailei
06275a09ac Merge pull request #12042 from jumpserver/pr@dev@ansible
perf: 密码中支持特殊字符比如"
2023-11-06 18:19:34 +08:00
feng
7b86938b58 perf: 密码中支持特殊字符比如" 2023-11-06 17:53:18 +08:00
fit2bot
44624d0ce0 feat: 工作台支持配置显示系统工具 (#12013)
Co-authored-by: halo <wuyihuangw@gmail.com>
2023-11-03 17:33:44 +08:00
wangruidong
9b8c817a16 perf: 修改字段翻译 2023-11-03 10:45:17 +08:00
ibuler
927fe1f128 perf: 修改资产协议 xpack 2023-11-03 10:43:34 +08:00
fit2bot
eee119eba1 feat: 个人设置 rdp smart size可配置 (#12021)
Co-authored-by: feng <1304903146@qq.com>
2023-11-02 18:51:17 +08:00
老广
53d8f716eb Merge pull request #12007 from jumpserver/pr@dev@json_field_support_m2m_all
perf: JSONManyToMany 中的 m2m 方式支持包含所有
2023-11-02 10:35:28 +08:00
吴小白
f48aec2bcb Merge pull request #12011 from jumpserver/pr@dev@perf_tinker_chrome
perf: 更新 chrome 和 chromedriver
2023-11-01 20:34:53 +08:00
吴小白
78e9f51786 perf: 移除旧版本 Chrome 文件 2023-11-01 18:49:38 +08:00
吴小白
af33ad6631 perf: 移除 python3 环境变量 2023-11-01 18:35:10 +08:00
吴小白
864da49ae6 perf: 更新 chrome 和 chromedriver 2023-11-01 18:10:03 +08:00
huailei
e6b8b3982d Merge pull request #12010 from jumpserver/pr@dev@perf_mobile_login
perf: 优化登录页样式
2023-11-01 17:02:28 +08:00
“huailei000”
49b3df218e perf: 优化登录页样式 2023-11-01 17:01:14 +08:00
ibuler
0858d67098 fix: 修改可能迁移的问题 2023-11-01 03:11:47 -05:00
ibuler
ffa242e635 perf: JSONManyToMany 中的 m2m 方式支持包含所有 2023-11-01 15:38:03 +08:00
wangruidong
4021b1955e fix: 组件启动失败 2023-10-31 19:18:35 +08:00
Bryan
204258f058 Update README.md 2023-10-31 18:20:01 +08:00
wangruidong
dc841650cf perf: AKSK添加访问IP控制 2023-10-31 02:43:33 -05:00
feng
bc54685a31 feat: 改密记录 推送记录可单独执行 2023-10-31 00:57:47 -05:00
ibuler
ee586954f8 feat: 发布机支持使用同名账号连接 2023-10-31 10:18:30 +08:00
ibuler
e56a37afd2 fix: 优化选择发布机 2023-10-30 16:07:02 +08:00
老广
7669744312 Merge pull request #11981 from jumpserver/pr@dev@feat_perm_add_protocols
perf: 资产授权添加协议
2023-10-30 10:12:45 +08:00
ibuler
ad8aba88a3 perf: 资产授权添加协议 2023-10-30 10:11:36 +08:00
wangruidong
7659846df4 perf: 兼容SERVER_NAME值多种情况 2023-10-27 16:45:42 +08:00
ibuler
f93979eb2d perf: 资产授权添加协议 2023-10-27 16:15:59 +08:00
fit2bot
badf83c560 perf: 命令存储为本地数据库时 搜索资产时支持模糊搜索 (#11978)
Co-authored-by: feng <1304903146@qq.com>
2023-10-26 17:10:27 +08:00
halo
f6466a3a20 fix: 修复DB2平台已经存在的问题 2023-10-26 01:25:47 -05:00
ibuler
996394ba29 perf: 优化 profile field 2023-10-25 05:09:15 -05:00
fit2bot
09f8470d34 fix: 改密校验可连接性失败 (#11964)
Co-authored-by: feng <1304903146@qq.com>
2023-10-25 16:21:45 +08:00
Bai
fdb3f6409c fix: 修复登录日志和在线用户会话的 IP 地址获取方式 2023-10-25 01:40:16 -05:00
ibuler
73b0b23910 perf: 修改rsa key 默认长度 2023-10-25 10:05:58 +08:00
ibuler
c1185e989a perf: 修复资产类型的 bug 2023-10-24 16:19:08 +08:00
fit2bot
1239082649 fix: change secret perm 没有生成 (#11948)
Co-authored-by: feng <1304903146@qq.com>
2023-10-24 14:07:07 +08:00
fit2bot
ff073185f1 fix: 改密切换至检测可连接性 失败 (#11946)
Co-authored-by: feng <1304903146@qq.com>
2023-10-24 11:30:26 +08:00
老广
d7a682b462 Merge pull request #11945 from jumpserver/pr@dev@perf_oauth2_access_token_content_type
perf: 优化OAuth2.0获取Access_token的content_type
2023-10-24 11:29:10 +08:00
Eric_Lee
4df2bdd9b6 Merge pull request #11944 from jumpserver/pr@dev@upgrade_tinker_python
perf: 更新 tinker python 版本
2023-10-24 10:39:36 +08:00
吴小白
2437072768 perf: 清理旧版本 chromedriver PATH 2023-10-24 10:29:14 +08:00
jiangweidong
08a2d96213 perf: 优化OAuth2.0获取Access_token的content_type 2023-10-24 10:26:38 +08:00
吴小白
de7d7b41c0 perf: 更新 tinker python 版本 2023-10-24 08:46:17 +08:00
jiangweidong
b04c7f022f perf: 使用scan命令扫描在线用户 2023-10-23 04:34:12 -05:00
feng
bf0d9f4b80 fix: 删除错误的改密权限 2023-10-23 04:32:00 -05:00
wangruidong
314257f790 perf: 作业中心执行历史增加保留天数配置 2023-10-23 04:13:35 -05:00
ibuler
6d2a62e413 fix: 优化替换 DOMAINS 中端口 的问题 2023-10-22 22:32:04 -05:00
老广
1734ddc2bd Merge pull request #11926 from jumpserver/pr@dev@database_list
fix: 资产数据库 不分页时list接口错误
2023-10-20 03:51:07 -05:00
feng
7c796e8201 fix: 资产数据库 不分页时list接口错误 2023-10-20 16:35:39 +08:00
老广
62a74418ea Merge pull request #11852 from jumpserver/pr@dev@perf_core
perf: 按照需求添加 core-ce 镜像
2023-10-19 21:35:23 -05:00
fit2bot
32461078fe perf: ticket 迁移文件 (#11920)
Co-authored-by: feng <1304903146@qq.com>
2023-10-19 20:00:47 +08:00
Bai
939b517e34 fix: 修复账号改密密码规则提交不生效的问题 2023-10-19 04:30:49 -05:00
jiangweidong
66eac762ff fix: 可以清空云同步中的策略 2023-10-19 03:57:00 -05:00
吴小白
6f4082f800 fix: 修正 actions 测试构建任务 2023-10-16 14:00:40 +08:00
吴小白
edd65f965b perf: 按照需求添加 core-ce 镜像 2023-10-16 13:30:51 +08:00
1325 changed files with 73051 additions and 39182 deletions

View File

@@ -8,3 +8,4 @@ celerybeat.pid
.vagrant/
apps/xpack/.git
.history/
.idea

View File

@@ -1,11 +0,0 @@
---
name: 需求建议
about: 提出针对本项目的想法和建议
title: "[Feature] "
labels: 类型:需求
assignees:
- ibuler
- baijiangjie
---
**请描述您的需求或者改进建议.**

72
.github/ISSUE_TEMPLATE/1_bug_report.yml vendored Normal file
View File

@@ -0,0 +1,72 @@
name: '🐛 Bug Report'
description: 'Report an Bug'
title: '[Bug] '
labels: ['🐛 Bug']
assignees:
- baijiangjie
body:
- type: input
attributes:
label: 'Product Version'
description: The versions prior to v2.28 (inclusive) are no longer supported.
validations:
required: true
- type: checkboxes
attributes:
label: 'Product Edition'
options:
- label: 'Community Edition'
- label: 'Enterprise Edition'
- label: 'Enterprise Trial Edition'
validations:
required: true
- type: checkboxes
attributes:
label: 'Installation Method'
options:
- label: 'Online Installation (One-click command installation)'
- label: 'Offline Package Installation'
- label: 'All-in-One'
- label: '1Panel'
- label: 'Kubernetes'
- label: 'Source Code'
- type: textarea
attributes:
label: 'Environment Information'
description: Please provide a clear and concise description outlining your environment information.
validations:
required: true
- type: textarea
attributes:
label: '🐛 Bug Description'
description:
Please provide a clear and concise description of the defect. If the issue is complex, please provide detailed explanations. <br/>
Unclear descriptions will not be processed. Please ensure you provide enough detail and information to support replicating and fixing the defect.
validations:
required: true
- type: textarea
attributes:
label: 'Recurrence Steps'
description: Please provide a clear and concise description outlining how to reproduce the issue.
validations:
required: true
- type: textarea
attributes:
label: 'Expected Behavior'
description: Please provide a clear and concise description of what you expect to happen.
- type: textarea
attributes:
label: 'Additional Information'
description: Please add any additional background information about the issue here.
- type: textarea
attributes:
label: 'Attempted Solutions'
description: If you have already attempted to solve the issue, please list the solutions you have tried here.

View File

@@ -0,0 +1,72 @@
name: '🐛 反馈缺陷'
description: '反馈一个缺陷'
title: '[Bug] '
labels: ['🐛 Bug']
assignees:
- baijiangjie
body:
- type: input
attributes:
label: '产品版本'
description: 不再支持 v2.28(含)之前的版本。
validations:
required: true
- type: checkboxes
attributes:
label: '版本类型'
options:
- label: '社区版'
- label: '企业版'
- label: '企业试用版'
validations:
required: true
- type: checkboxes
attributes:
label: '安装方式'
options:
- label: '在线安装 (一键命令安装)'
- label: '离线包安装'
- label: 'All-in-One'
- label: '1Panel'
- label: 'Kubernetes'
- label: '源码安装'
- type: textarea
attributes:
label: '环境信息'
description: 请提供一个清晰且简洁的描述,说明你的环境信息。
validations:
required: true
- type: textarea
attributes:
label: '🐛 缺陷描述'
description: |
请提供一个清晰且简洁的缺陷描述,如果问题比较复杂,也请详细说明。<br/>
针对不清晰的描述信息将不予处理。请确保提供足够的细节和信息,以支持对缺陷进行复现和修复。
validations:
required: true
- type: textarea
attributes:
label: '复现步骤'
description: 请提供一个清晰且简洁的描述,说明如何复现问题。
validations:
required: true
- type: textarea
attributes:
label: '期望结果'
description: 请提供一个清晰且简洁的描述,说明你期望发生什么。
- type: textarea
attributes:
label: '补充信息'
description: 在这里添加关于问题的任何其他背景信息。
- type: textarea
attributes:
label: '尝试过的解决方案'
description: 如果你已经尝试解决问题,请在此列出你尝试过的解决方案。

View File

@@ -0,0 +1,56 @@
name: '⭐️ Feature Request'
description: 'Suggest an idea'
title: '[Feature] '
labels: ['⭐️ Feature Request']
assignees:
- baijiangjie
- ibuler
body:
- type: input
attributes:
label: 'Product Version'
description: The versions prior to v2.28 (inclusive) are no longer supported.
validations:
required: true
- type: checkboxes
attributes:
label: 'Product Edition'
options:
- label: 'Community Edition'
- label: 'Enterprise Edition'
- label: 'Enterprise Trial Edition'
validations:
required: true
- type: checkboxes
attributes:
label: 'Installation Method'
options:
- label: 'Online Installation (One-click command installation)'
- label: 'Offline Package Installation'
- label: 'All-in-One'
- label: '1Panel'
- label: 'Kubernetes'
- label: 'Source Code'
- type: textarea
attributes:
label: '⭐️ Feature Description'
description: |
Please add a clear and concise description of the problem you aim to solve with this feature request.<br/>
Unclear descriptions will not be processed.
validations:
required: true
- type: textarea
attributes:
label: 'Proposed Solution'
description: Please provide a clear and concise description of the solution you desire.
validations:
required: true
- type: textarea
attributes:
label: 'Additional Information'
description: Please add any additional background information about the issue here.

View File

@@ -0,0 +1,56 @@
name: '⭐️ 功能需求'
description: '提出需求或建议'
title: '[Feature] '
labels: ['⭐️ Feature Request']
assignees:
- baijiangjie
- ibuler
body:
- type: input
attributes:
label: '产品版本'
description: 不再支持 v2.28(含)之前的版本。
validations:
required: true
- type: checkboxes
attributes:
label: '版本类型'
options:
- label: '社区版'
- label: '企业版'
- label: '企业试用版'
validations:
required: true
- type: checkboxes
attributes:
label: '安装方式'
options:
- label: '在线安装 (一键命令安装)'
- label: '离线包安装'
- label: 'All-in-One'
- label: '1Panel'
- label: 'Kubernetes'
- label: '源码安装'
- type: textarea
attributes:
label: '⭐️ 需求描述'
description: |
请添加一个清晰且简洁的问题描述,阐述你希望通过这个功能需求解决的问题。<br/>
针对不清晰的描述信息将不予处理。
validations:
required: true
- type: textarea
attributes:
label: '解决方案'
description: 请清晰且简洁地描述你想要的解决方案。
validations:
required: true
- type: textarea
attributes:
label: '补充信息'
description: 在这里添加关于问题的任何其他背景信息。

60
.github/ISSUE_TEMPLATE/3_question.yml vendored Normal file
View File

@@ -0,0 +1,60 @@
name: '🤔 Question'
description: 'Pose a question'
title: '[Question] '
labels: ['🤔 Question']
assignees:
- baijiangjie
body:
- type: input
attributes:
label: 'Product Version'
description: The versions prior to v2.28 (inclusive) are no longer supported.
validations:
required: true
- type: checkboxes
attributes:
label: 'Product Edition'
options:
- label: 'Community Edition'
- label: 'Enterprise Edition'
- label: 'Enterprise Trial Edition'
validations:
required: true
- type: checkboxes
attributes:
label: 'Installation Method'
options:
- label: 'Online Installation (One-click command installation)'
- label: 'Offline Package Installation'
- label: 'All-in-One'
- label: '1Panel'
- label: 'Kubernetes'
- label: 'Source Code'
- type: textarea
attributes:
label: 'Environment Information'
description: Please provide a clear and concise description outlining your environment information.
validations:
required: true
- type: textarea
attributes:
label: '🤔 Question Description'
description: |
Please provide a clear and concise description of the defect. If the issue is complex, please provide detailed explanations. <br/>
Unclear descriptions will not be processed.
validations:
required: true
- type: textarea
attributes:
label: 'Expected Behavior'
description: Please provide a clear and concise description of what you expect to happen.
- type: textarea
attributes:
label: 'Additional Information'
description: Please add any additional background information about the issue here.

View File

@@ -0,0 +1,61 @@
name: '🤔 问题咨询'
description: '提出一个问题'
title: '[Question] '
labels: ['🤔 Question']
assignees:
- baijiangjie
body:
- type: input
attributes:
label: '产品版本'
description: 不再支持 v2.28(含)之前的版本。
validations:
required: true
- type: checkboxes
attributes:
label: '版本类型'
options:
- label: '社区版'
- label: '企业版'
- label: '企业试用版'
validations:
required: true
- type: checkboxes
attributes:
label: '安装方式'
options:
- label: '在线安装 (一键命令安装)'
- label: '离线包安装'
- label: 'All-in-One'
- label: '1Panel'
- label: 'Kubernetes'
- label: '源码安装'
- type: textarea
attributes:
label: '环境信息'
description: 请在此详细描述你的环境信息,如操作系统、浏览器和部署架构等。
validations:
required: true
- type: textarea
attributes:
label: '🤔 问题描述'
description: |
请提供一个清晰且简洁的问题描述,如果问题比较复杂,也请详细说明。<br/>
针对不清晰的描述信息将不予处理。
validations:
required: true
- type: textarea
attributes:
label: '期望结果'
description: 请提供一个清晰且简洁的描述,说明你期望发生什么。
- type: textarea
attributes:
label: '补充信息'
description: 在这里添加关于问题的任何其他背景信息。

View File

@@ -1,22 +0,0 @@
---
name: Bug 提交
about: 提交产品缺陷帮助我们更好的改进
title: "[Bug] "
labels: 类型:Bug
assignees:
- baijiangjie
---
**JumpServer 版本( v2.28 之前的版本不再支持 )**
**浏览器版本**
**Bug 描述**
**Bug 重现步骤(有截图更好)**
1.
2.
3.

View File

@@ -1,10 +0,0 @@
---
name: 问题咨询
about: 提出针对本项目安装部署、使用及其他方面的相关问题
title: "[Question] "
labels: 类型:提问
assignees:
- baijiangjie
---
**请描述您的问题.**

72
.github/workflows/build-base-image.yml vendored Normal file
View File

@@ -0,0 +1,72 @@
name: Build and Push Base Image
on:
pull_request:
branches:
- 'dev'
- 'v*'
paths:
- poetry.lock
- pyproject.toml
- Dockerfile-base
- package.json
- go.mod
- yarn.lock
- pom.xml
- install_deps.sh
- utils/clean_site_packages.sh
types:
- opened
- synchronize
- reopened
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Extract date
id: vars
run: echo "IMAGE_TAG=$(date +'%Y%m%d_%H%M%S')" >> $GITHUB_ENV
- name: Extract repository name
id: repo
run: echo "REPO=$(basename ${{ github.repository }})" >> $GITHUB_ENV
- name: Build and push multi-arch image
uses: docker/build-push-action@v6
with:
platforms: linux/amd64,linux/arm64
push: true
file: Dockerfile-base
tags: jumpserver/core-base:${{ env.IMAGE_TAG }}
- name: Update Dockerfile
run: |
sed -i 's|-base:.* AS stage-build|-base:${{ env.IMAGE_TAG }} AS stage-build|' Dockerfile
- name: Commit changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add Dockerfile
git commit -m "perf: Update Dockerfile with new base image tag"
git push origin ${{ github.event.pull_request.head.ref }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -0,0 +1,31 @@
name: Check I18n files CompileMessages
on:
pull_request:
branches:
- 'dev'
paths:
- 'apps/i18n/core/**/*.po'
types:
- opened
- synchronize
- reopened
jobs:
compile-messages-check:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and check compilemessages
uses: docker/build-push-action@v6
with:
platforms: linux/amd64
push: false
file: Dockerfile
target: stage-build
tags: jumpserver/core:stage-build

24
.github/workflows/discord-release.yml vendored Normal file
View File

@@ -0,0 +1,24 @@
name: Publish Release to Discord
on:
release:
types: [published]
jobs:
send_discord_notification:
runs-on: ubuntu-latest
if: startsWith(github.event.release.tag_name, 'v4.')
steps:
- name: Send release notification to Discord
env:
WEBHOOK_URL: ${{ secrets.DISCORD_CHANGELOG_WEBHOOK }}
run: |
# 获取标签名称和 release body
TAG_NAME="${{ github.event.release.tag_name }}"
RELEASE_BODY="${{ github.event.release.body }}"
# 使用 jq 构建 JSON 数据,以确保安全传递
JSON_PAYLOAD=$(jq -n --arg tag "# JumpServer $TAG_NAME Released! 🚀" --arg body "$RELEASE_BODY" '{content: "\($tag)\n\($body)"}')
# 使用 curl 发送 JSON 数据
curl -X POST -H "Content-Type: application/json" -d "$JSON_PAYLOAD" "$WEBHOOK_URL"

View File

@@ -12,7 +12,9 @@ jobs:
uses: actions-cool/issues-helper@v2
with:
actions: 'close-issues'
labels: '状态:待反馈'
labels: '⏳ Pending feedback'
inactive-day: 30
body: |
You haven't provided feedback for over 30 days.
We will close this issue. If you have any further needs, you can reopen it or submit a new issue.
您超过 30 天未反馈信息,我们将关闭该 issue如有需求您可以重新打开或者提交新的 issue。

View File

@@ -13,4 +13,4 @@ jobs:
if: ${{ !github.event.issue.pull_request }}
with:
actions: 'remove-labels'
labels: '状态:待处理,状态:待反馈'
labels: '🔔 Pending processing,⏳ Pending feedback'

View File

@@ -13,13 +13,13 @@ jobs:
uses: actions-cool/issues-helper@v2
with:
actions: 'add-labels'
labels: '状态:待处理'
labels: '🔔 Pending processing'
- name: Remove require reply label
uses: actions-cool/issues-helper@v2
with:
actions: 'remove-labels'
labels: '状态:待反馈'
labels: '⏳ Pending feedback'
add-label-if-is-member:
runs-on: ubuntu-latest
@@ -55,11 +55,11 @@ jobs:
uses: actions-cool/issues-helper@v2
with:
actions: 'add-labels'
labels: '状态:待反馈'
labels: '⏳ Pending feedback'
- name: Remove require handle label
if: contains(steps.member_names.outputs.data, github.event.comment.user.login)
uses: actions-cool/issues-helper@v2
with:
actions: 'remove-labels'
labels: '状态:待处理'
labels: '🔔 Pending processing'

View File

@@ -13,4 +13,4 @@ jobs:
if: ${{ !github.event.issue.pull_request }}
with:
actions: 'add-labels'
labels: '状态:待处理'
labels: '🔔 Pending processing'

View File

@@ -1,36 +0,0 @@
name: "Run Build Test"
on:
push:
branches:
- pr@*
- repr@*
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: docker/setup-qemu-action@v2
- uses: docker/setup-buildx-action@v2
- uses: docker/build-push-action@v3
with:
context: .
push: false
tags: jumpserver/core:test
file: Dockerfile
build-args: |
APT_MIRROR=http://deb.debian.org
PIP_MIRROR=https://pypi.org/simple
PIP_JMS_MIRROR=https://pypi.org/simple
cache-from: type=gha
cache-to: type=gha,mode=max
- uses: LouisBrunner/checks-action@v1.5.0
if: always()
with:
token: ${{ secrets.GITHUB_TOKEN }}
name: Check Build
conclusion: ${{ job.status }}

View File

@@ -0,0 +1,63 @@
name: "Run Build Test"
on:
push:
paths:
- 'Dockerfile'
- 'Dockerfile*'
- 'Dockerfile-*'
- 'pyproject.toml'
- 'poetry.lock'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
component: [core]
version: [v4]
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Prepare Build
run: |
sed -i 's@^FROM registry.fit2cloud.com/jumpserver@FROM ghcr.io/jumpserver@g' Dockerfile-ee
- name: Build CE Image
uses: docker/build-push-action@v5
with:
context: .
push: true
file: Dockerfile
tags: ghcr.io/jumpserver/${{ matrix.component }}:${{ matrix.version }}-ce
platforms: linux/amd64
build-args: |
VERSION=${{ matrix.version }}
APT_MIRROR=http://deb.debian.org
PIP_MIRROR=https://pypi.org/simple
outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Build EE Image
uses: docker/build-push-action@v5
with:
context: .
push: false
file: Dockerfile-ee
tags: ghcr.io/jumpserver/${{ matrix.component }}:${{ matrix.version }}
platforms: linux/amd64
build-args: |
VERSION=${{ matrix.version }}
APT_MIRROR=http://deb.debian.org
PIP_MIRROR=https://pypi.org/simple
outputs: type=image,oci-mediatypes=true,compression=zstd,compression-level=3,force-compression=true
cache-from: type=gha
cache-to: type=gha,mode=max

View File

@@ -10,3 +10,4 @@ jobs:
- uses: jumpserver/action-generic-handler@master
env:
GITHUB_TOKEN: ${{ secrets.PRIVATE_TOKEN }}
I18N_TOKEN: ${{ secrets.I18N_TOKEN }}

28
.github/workflows/llm-code-review.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
name: LLM Code Review
permissions:
contents: read
pull-requests: write
on:
pull_request:
types: [opened, reopened, synchronize]
jobs:
llm-code-review:
runs-on: ubuntu-latest
steps:
- uses: fit2cloud/LLM-CodeReview-Action@main
env:
GITHUB_TOKEN: ${{ secrets.FIT2CLOUDRD_LLM_CODE_REVIEW_TOKEN }}
OPENAI_API_KEY: ${{ secrets.ALIYUN_LLM_API_KEY }}
LANGUAGE: English
OPENAI_API_ENDPOINT: https://dashscope.aliyuncs.com/compatible-mode/v1
MODEL: qwen2-1.5b-instruct
PROMPT: "Please check the following code differences for any irregularities, potential issues, or optimization suggestions, and provide your answers in English."
top_p: 1
temperature: 1
# max_tokens: 10000
MAX_PATCH_LENGTH: 10000
IGNORE_PATTERNS: "/node_modules,*.md,/dist,/.github"
FILE_PATTERNS: "*.java,*.go,*.py,*.vue,*.ts,*.js,*.css,*.scss,*.html"

2
.gitignore vendored
View File

@@ -43,3 +43,5 @@ releashe
data/*
test.py
.history/
.test/
*.mo

View File

@@ -1,3 +1,4 @@
[settings]
line_length=120
known_first_party=common,users,assets,perms,authentication,jumpserver,notification,ops,orgs,rbac,settings,terminal,tickets

View File

@@ -1,5 +1,10 @@
# Contributing
As a contributor, you should agree that:
- The producer can adjust the open-source agreement to be more strict or relaxed as deemed necessary.
- Your contributed code may be used for commercial purposes, including but not limited to its cloud business operations.
## Create pull request
PR are always welcome, even if they only contain small fixes like typos or a few lines of code. If there will be a significant effort, please document it as an issue and get a discussion going before starting to work on it.

View File

@@ -1,86 +1,68 @@
FROM python:3.11-slim-bullseye as stage-build
ARG TARGETARCH
FROM jumpserver/core-base:20241105_025649 AS stage-build
ARG VERSION
ENV VERSION=$VERSION
WORKDIR /opt/jumpserver
ADD . .
RUN cd utils && bash -ixeu build.sh
RUN echo > /opt/jumpserver/config.yml \
&& \
if [ -n "${VERSION}" ]; then \
sed -i "s@VERSION = .*@VERSION = '${VERSION}'@g" apps/jumpserver/const.py; \
fi
RUN set -ex \
&& export SECRET_KEY=$(head -c100 < /dev/urandom | base64 | tr -dc A-Za-z0-9 | head -c 48) \
&& . /opt/py3/bin/activate \
&& cd apps \
&& python manage.py compilemessages
FROM python:3.11-slim-bullseye
ARG TARGETARCH
ARG BUILD_DEPENDENCIES=" \
g++ \
make \
pkg-config"
ENV LANG=en_US.UTF-8 \
PATH=/opt/py3/bin:$PATH
ARG DEPENDENCIES=" \
freetds-dev \
libpq-dev \
libffi-dev \
libjpeg-dev \
libkrb5-dev \
libldap2-dev \
libsasl2-dev \
libssl-dev \
libxml2-dev \
libxmlsec1-dev \
libxmlsec1-openssl \
freerdp2-dev \
libaio-dev"
libx11-dev"
ARG TOOLS=" \
cron \
ca-certificates \
curl \
default-libmysqlclient-dev \
default-mysql-client \
iputils-ping \
locales \
nmap \
openssh-client \
patch \
sshpass \
telnet \
vim \
wget"
bubblewrap"
ARG APT_MIRROR=http://mirrors.ustc.edu.cn
ARG APT_MIRROR=http://deb.debian.org
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=core \
sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list \
&& rm -f /etc/apt/apt.conf.d/docker-clean \
RUN set -ex \
&& sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& apt-get update \
&& apt-get -y install --no-install-recommends ${BUILD_DEPENDENCIES} \
&& apt-get update > /dev/null \
&& apt-get -y install --no-install-recommends ${DEPENDENCIES} \
&& apt-get -y install --no-install-recommends ${TOOLS} \
&& mkdir -p /root/.ssh/ \
&& echo "Host *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile /dev/null\n\tCiphers +aes128-cbc\n\tKexAlgorithms +diffie-hellman-group1-sha1\n\tHostKeyAlgorithms +ssh-rsa" > /root/.ssh/config \
&& echo "set mouse-=a" > ~/.vimrc \
&& echo "no" | dpkg-reconfigure dash \
&& echo "zh_CN.UTF-8" | dpkg-reconfigure locales \
&& sed -i "s@# export @export @g" ~/.bashrc \
&& sed -i "s@# alias @alias @g" ~/.bashrc \
&& rm -rf /var/lib/apt/lists/*
&& apt-get clean all \
&& rm -rf /var/lib/apt/lists/* \
&& echo "0 3 * * * root find /tmp -type f -mtime +1 -size +1M -exec rm -f {} \; && date > /tmp/clean.log" > /etc/cron.d/cleanup_tmp \
&& chmod 0644 /etc/cron.d/cleanup_tmp
COPY --from=stage-build /opt /opt
COPY --from=stage-build /usr/local/bin /usr/local/bin
COPY --from=stage-build /opt/jumpserver/apps/libs/ansible/ansible.cfg /etc/ansible/
COPY --from=stage-build /opt/jumpserver/release/jumpserver /opt/jumpserver
WORKDIR /opt/jumpserver
ARG PIP_MIRROR=https://pypi.tuna.tsinghua.edu.cn/simple
RUN --mount=type=cache,target=/root/.cache \
set -ex \
&& echo > /opt/jumpserver/config.yml \
&& pip install poetry -i ${PIP_MIRROR} \
&& poetry config virtualenvs.create false \
&& poetry install --only=main
VOLUME /opt/jumpserver/data
VOLUME /opt/jumpserver/logs
ENV LANG=zh_CN.UTF-8
ENTRYPOINT ["./entrypoint.sh"]
EXPOSE 8080
ENTRYPOINT ["./entrypoint.sh"]
STOPSIGNAL SIGQUIT
CMD ["start", "all"]

60
Dockerfile-base Normal file
View File

@@ -0,0 +1,60 @@
FROM python:3.11-slim-bullseye
ARG TARGETARCH
# Install APT dependencies
ARG DEPENDENCIES=" \
ca-certificates \
wget \
g++ \
make \
pkg-config \
default-libmysqlclient-dev \
freetds-dev \
gettext \
libkrb5-dev \
libldap2-dev \
libsasl2-dev"
ARG APT_MIRROR=http://deb.debian.org
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=core \
--mount=type=cache,target=/var/lib/apt,sharing=locked,id=core \
set -ex \
&& rm -f /etc/apt/apt.conf.d/docker-clean \
&& echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache \
&& sed -i "s@http://.*.debian.org@${APT_MIRROR}@g" /etc/apt/sources.list \
&& apt-get update > /dev/null \
&& apt-get -y install --no-install-recommends ${DEPENDENCIES} \
&& echo "no" | dpkg-reconfigure dash
# Install bin tools
ARG CHECK_VERSION=v1.0.4
RUN set -ex \
&& wget https://github.com/jumpserver-dev/healthcheck/releases/download/${CHECK_VERSION}/check-${CHECK_VERSION}-linux-${TARGETARCH}.tar.gz \
&& tar -xf check-${CHECK_VERSION}-linux-${TARGETARCH}.tar.gz \
&& mv check /usr/local/bin/ \
&& chown root:root /usr/local/bin/check \
&& chmod 755 /usr/local/bin/check \
&& rm -f check-${CHECK_VERSION}-linux-${TARGETARCH}.tar.gz
# Install Python dependencies
WORKDIR /opt/jumpserver
ARG PIP_MIRROR=https://pypi.org/simple
ENV POETRY_PYPI_MIRROR_URL=${PIP_MIRROR}
ENV ANSIBLE_COLLECTIONS_PATHS=/opt/py3/lib/python3.11/site-packages/ansible_collections
RUN --mount=type=cache,target=/root/.cache \
--mount=type=bind,source=poetry.lock,target=poetry.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
--mount=type=bind,source=utils/clean_site_packages.sh,target=clean_site_packages.sh \
--mount=type=bind,source=requirements/collections.yml,target=collections.yml \
set -ex \
&& python3 -m venv /opt/py3 \
&& pip install poetry poetry-plugin-pypi-mirror -i ${PIP_MIRROR} \
&& . /opt/py3/bin/activate \
&& poetry config virtualenvs.create false \
&& poetry install --no-cache --only main \
&& ansible-galaxy collection install -r collections.yml --force --ignore-certs \
&& bash clean_site_packages.sh \
&& poetry cache clear pypi --all

View File

@@ -1,9 +1,34 @@
ARG VERSION
FROM registry.fit2cloud.com/jumpserver/xpack:${VERSION} as build-xpack
FROM jumpserver/core:${VERSION}
ARG VERSION=dev
FROM registry.fit2cloud.com/jumpserver/xpack:${VERSION} AS build-xpack
FROM jumpserver/core:${VERSION}-ce
COPY --from=build-xpack /opt/xpack /opt/jumpserver/apps/xpack
RUN --mount=type=cache,target=/root/.cache \
set -ex \
&& poetry install --only=xpack
ARG TOOLS=" \
g++ \
curl \
iputils-ping \
netcat-openbsd \
nmap \
telnet \
vim \
wget"
RUN set -ex \
&& apt-get update \
&& apt-get -y install --no-install-recommends ${TOOLS} \
&& apt-get clean all \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /opt/jumpserver
ARG PIP_MIRROR=https://pypi.org/simple
ENV POETRY_PYPI_MIRROR_URL=${PIP_MIRROR}
COPY poetry.lock pyproject.toml ./
RUN set -ex \
&& . /opt/py3/bin/activate \
&& pip install poetry poetry-plugin-pypi-mirror -i ${PIP_MIRROR} \
&& poetry install --only xpack \
&& poetry cache clear pypi --all

182
README.md
View File

@@ -1,123 +1,115 @@
<p align="center">
<a href="https://jumpserver.org"><img src="https://download.jumpserver.org/images/jumpserver-logo.svg" alt="JumpServer" width="300" /></a>
</p>
<h3 align="center">广受欢迎的开源堡垒机</h3>
<div align="center">
<a name="readme-top"></a>
<a href="https://jumpserver.org/index-en.html"><img src="https://download.jumpserver.org/images/jumpserver-logo.svg" alt="JumpServer" width="300" /></a>
## An open-source PAM tool (Bastion Host)
<p align="center">
<a href="https://www.gnu.org/licenses/gpl-3.0.html"><img src="https://img.shields.io/github/license/jumpserver/jumpserver" alt="License: GPLv3"></a>
<a href="https://hub.docker.com/u/jumpserver"><img src="https://img.shields.io/docker/pulls/jumpserver/jms_all.svg" alt="Docker pulls"></a>
<a href="https://github.com/jumpserver/jumpserver/releases/latest"><img src="https://img.shields.io/github/v/release/jumpserver/jumpserver" alt="Latest release"></a>
<a href="https://github.com/jumpserver/jumpserver"><img src="https://img.shields.io/github/stars/jumpserver/jumpserver?color=%231890FF&style=flat-square" alt="Stars"></a>
</p>
[![][license-shield]][license-link]
[![][discord-shield]][discord-link]
[![][docker-shield]][docker-link]
[![][github-release-shield]][github-release-link]
[![][github-stars-shield]][github-stars-link]
**English** · [简体中文](./README.zh-CN.md)
</div>
<br/>
<p align="center">
9 年时间,倾情投入,用心做好一款开源堡垒机。
</p>
## What is JumpServer?
------------------------------
JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。
JumpServer is an open-source Privileged Access Management (PAM) tool that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.
JumpServer 堡垒机帮助企业以更安全的方式管控和登录各种类型的资产,包括:
![JumpServer Overview](https://github.com/jumpserver/jumpserver/assets/32935519/35a371cb-8590-40ed-88ec-f351f8cf9045)
- **SSH**: Linux / Unix / 网络设备 等;
- **Windows**: Web 方式连接 / 原生 RDP 连接;
- **数据库**: MySQL / MariaDB / PostgreSQL / Oracle / SQLServer / ClickHouse 等;
- **NoSQL**: Redis / MongoDB 等;
- **GPT**: ChatGPT 等;
- **云服务**: Kubernetes / VMware vSphere 等;
- **Web 站点**: 各类系统的 Web 管理后台;
- **应用**: 通过 Remote App 连接各类应用。
## Quickstart
## 产品特色
Prepare a clean Linux Server ( 64 bit, >= 4c8g )
- **开源**: 零门槛,线上快速获取和安装;
- **无插件**: 仅需浏览器,极致的 Web Terminal 使用体验;
- **分布式**: 支持分布式部署和横向扩展,轻松支持大规模并发访问;
- **多云支持**: 一套系统,同时管理不同云上面的资产;
- **多租户**: 一套系统,多个子公司或部门同时使用;
- **云端存储**: 审计录像云端存储,永不丢失;
```sh
curl -sSL https://github.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash
```
## UI 展示
Access JumpServer in your browser at `http://your-jumpserver-ip/`
- Username: `admin`
- Password: `ChangeMe`
![UI展示](https://docs.jumpserver.org/zh/v3/img/dashboard.png)
[![JumpServer Quickstart](https://github.com/user-attachments/assets/0f32f52b-9935-485e-8534-336c63389612)](https://www.youtube.com/watch?v=UlGYRbKrpgY "JumpServer Quickstart")
## 在线体验
## Screenshots
- 环境地址:<https://demo.jumpserver.org/>
<table style="border-collapse: collapse; border: 1px solid black;">
<tr>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/99fabe5b-0475-4a53-9116-4c370a1426c4" alt="JumpServer Console" /></td>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/a424d731-1c70-4108-a7d8-5bbf387dda9a" alt="JumpServer Audits" /></td>
</tr>
| :warning: 注意 |
|:-----------------------------|
| 该环境仅作体验目的使用,我们会定时清理、重置数据! |
| 请勿修改体验环境用户的密码! |
| 请勿在环境中添加业务生产环境地址、用户名密码等敏感信息! |
<tr>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/393d2c27-a2d0-4dea-882d-00ed509e00c9" alt="JumpServer Workbench" /></td>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/3a2611cd-8902-49b8-b82b-2a6dac851f3e" alt="JumpServer Settings" /></td>
</tr>
## 快速开始
<tr>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/1e236093-31f7-4563-8eb1-e36d865f1568" alt="JumpServer SSH" /></td>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/69373a82-f7ab-41e8-b763-bbad2ba52167" alt="JumpServer RDP" /></td>
</tr>
<tr>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/5bed98c6-cbe8-4073-9597-d53c69dc3957" alt="JumpServer K8s" /></td>
<td style="padding: 5px;background-color:#fff;"><img src= "https://github.com/jumpserver/jumpserver/assets/32935519/b80ad654-548f-42bc-ba3d-c1cfdf1b46d6" alt="JumpServer DB" /></td>
</tr>
</table>
- [快速入门](https://docs.jumpserver.org/zh/v3/quick_start/)
- [产品文档](https://docs.jumpserver.org)
- [在线学习](https://edu.fit2cloud.com/page/2635362)
- [知识库](https://kb.fit2cloud.com/categories/jumpserver)
## Components
## 案例研究
JumpServer consists of multiple key components, which collectively form the functional framework of JumpServer, providing users with comprehensive capabilities for operations management and security control.
- [腾讯海外游戏基于JumpServer构建游戏安全运营能力](https://blog.fit2cloud.com/?p=3704)
- [万华化学通过JumpServer管理全球化分布式IT资产并且实现与云管平台的联动](https://blog.fit2cloud.com/?p=3504)
- [雪花啤酒JumpServer堡垒机使用体会](https://blog.fit2cloud.com/?p=3412)
- [顺丰科技JumpServer 堡垒机护航顺丰科技超大规模资产安全运维](https://blog.fit2cloud.com/?p=1147)
- [沐瞳游戏通过JumpServer管控多项目分布式资产](https://blog.fit2cloud.com/?p=3213)
- [携程JumpServer 堡垒机部署与运营实战](https://blog.fit2cloud.com/?p=851)
- [大智慧JumpServer 堡垒机让“大智慧”的混合 IT 运维更智慧](https://blog.fit2cloud.com/?p=882)
- [小红书JumpServer 堡垒机大规模资产跨版本迁移之路](https://blog.fit2cloud.com/?p=516)
- [中手游JumpServer堡垒机助力中手游提升多云环境下安全运维能力](https://blog.fit2cloud.com/?p=732)
- [中通快递JumpServer主机安全运维实践](https://blog.fit2cloud.com/?p=708)
- [东方明珠JumpServer高效管控异构化、分布式云端资产](https://blog.fit2cloud.com/?p=687)
- [江苏农信JumpServer堡垒机助力行业云安全运维](https://blog.fit2cloud.com/?p=666)
| Project | Status | Description |
|--------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| [Lina](https://github.com/jumpserver/lina) | <a href="https://github.com/jumpserver/lina/releases"><img alt="Lina release" src="https://img.shields.io/github/release/jumpserver/lina.svg" /></a> | JumpServer Web UI |
| [Luna](https://github.com/jumpserver/luna) | <a href="https://github.com/jumpserver/luna/releases"><img alt="Luna release" src="https://img.shields.io/github/release/jumpserver/luna.svg" /></a> | JumpServer Web Terminal |
| [KoKo](https://github.com/jumpserver/koko) | <a href="https://github.com/jumpserver/koko/releases"><img alt="Koko release" src="https://img.shields.io/github/release/jumpserver/koko.svg" /></a> | JumpServer Character Protocol Connector |
| [Lion](https://github.com/jumpserver/lion) | <a href="https://github.com/jumpserver/lion/releases"><img alt="Lion release" src="https://img.shields.io/github/release/jumpserver/lion.svg" /></a> | JumpServer Graphical Protocol Connector |
| [Chen](https://github.com/jumpserver/chen) | <a href="https://github.com/jumpserver/chen/releases"><img alt="Chen release" src="https://img.shields.io/github/release/jumpserver/chen.svg" /> | JumpServer Web DB |
| [Razor](https://github.com/jumpserver/razor) | <img alt="Chen" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE RDP Proxy Connector |
| [Tinker](https://github.com/jumpserver/tinker) | <img alt="Tinker" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE Remote Application Connector (Windows) |
| [Panda](https://github.com/jumpserver/Panda) | <img alt="Panda" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE Remote Application Connector (Linux) |
| [Magnus](https://github.com/jumpserver/magnus) | <img alt="Magnus" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE Database Proxy Connector |
## 社区交流
## Contributing
如果您在使用过程中有任何疑问或对建议,欢迎提交 [GitHub Issue](https://github.com/jumpserver/jumpserver/issues/new/choose)。
Welcome to submit PR to contribute. Please refer to [CONTRIBUTING.md][contributing-link] for guidelines.
您也可以到我们的 [社区论坛](https://bbs.fit2cloud.com/c/js/5) 当中进行交流沟通。
## Security
### 参与贡献
JumpServer is a mission critical product. Please refer to the Basic Security Recommendations for installation and deployment. If you encounter any security-related issues, please contact us directly:
欢迎提交 PR 参与贡献。 参考 [CONTRIBUTING.md](https://github.com/jumpserver/jumpserver/blob/dev/CONTRIBUTING.md)
- Email: support@fit2cloud.com
## 组件项目
## License
| 项目 | 状态 | 描述 |
|--------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
| [Lina](https://github.com/jumpserver/lina) | <a href="https://github.com/jumpserver/lina/releases"><img alt="Lina release" src="https://img.shields.io/github/release/jumpserver/lina.svg" /></a> | JumpServer Web UI 项目 |
| [Luna](https://github.com/jumpserver/luna) | <a href="https://github.com/jumpserver/luna/releases"><img alt="Luna release" src="https://img.shields.io/github/release/jumpserver/luna.svg" /></a> | JumpServer Web Terminal 项目 |
| [KoKo](https://github.com/jumpserver/koko) | <a href="https://github.com/jumpserver/koko/releases"><img alt="Koko release" src="https://img.shields.io/github/release/jumpserver/koko.svg" /></a> | JumpServer 字符协议 Connector 项目 |
| [Lion](https://github.com/jumpserver/lion-release) | <a href="https://github.com/jumpserver/lion-release/releases"><img alt="Lion release" src="https://img.shields.io/github/release/jumpserver/lion-release.svg" /></a> | JumpServer 图形协议 Connector 项目,依赖 [Apache Guacamole](https://guacamole.apache.org/) |
| [Razor](https://github.com/jumpserver/razor) | <img alt="Chen" src="https://img.shields.io/badge/release-私有发布-red" /> | JumpServer RDP 代理 Connector 项目 |
| [Tinker](https://github.com/jumpserver/tinker) | <img alt="Tinker" src="https://img.shields.io/badge/release-私有发布-red" /> | JumpServer 远程应用 Connector 项目 |
| [Magnus](https://github.com/jumpserver/magnus-release) | <a href="https://github.com/jumpserver/magnus-release/releases"><img alt="Magnus release" src="https://img.shields.io/github/release/jumpserver/magnus-release.svg" /> | JumpServer 数据库代理 Connector 项目 |
| [Chen](https://github.com/jumpserver/chen-release) | <a href="https://github.com/jumpserver/chen-release/releases"><img alt="Chen release" src="https://img.shields.io/github/release/jumpserver/chen-release.svg" /> | JumpServer Web DB 项目,替代原来的 OmniDB |
| [Kael](https://github.com/jumpserver/kael) | <a href="https://github.com/jumpserver/kael/releases"><img alt="Kael release" src="https://img.shields.io/github/release/jumpserver/kael.svg" /> | JumpServer 连接 GPT 资产的组件项目 |
| [Wisp](https://github.com/jumpserver/wisp) | <a href="https://github.com/jumpserver/wisp/releases"><img alt="Magnus release" src="https://img.shields.io/github/release/jumpserver/wisp.svg" /> | JumpServer 各系统终端组件和 Core Api 通信的组件项目 |
| [Clients](https://github.com/jumpserver/clients) | <a href="https://github.com/jumpserver/clients/releases"><img alt="Clients release" src="https://img.shields.io/github/release/jumpserver/clients.svg" /> | JumpServer 客户端 项目 |
| [Installer](https://github.com/jumpserver/installer) | <a href="https://github.com/jumpserver/installer/releases"><img alt="Installer release" src="https://img.shields.io/github/release/jumpserver/installer.svg" /> | JumpServer 安装包 项目 |
Copyright (c) 2014-2024 飞致云 FIT2CLOUD, All rights reserved.
## 安全说明
JumpServer是一款安全产品请参考 [基本安全建议](https://docs.jumpserver.org/zh/master/install/install_security/)
进行安装部署。如果您发现安全相关问题,请直接联系我们:
- 邮箱support@fit2cloud.com
- 电话400-052-0755
## License & Copyright
Copyright (c) 2014-2023 飞致云 FIT2CLOUD, All rights reserved.
Licensed under The GNU General Public License version 3 (GPLv3) (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
Licensed under The GNU General Public License version 3 (GPLv3) (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
https://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "
AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an " AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
<!-- JumpServer official link -->
[docs-link]: https://jumpserver.com/docs
[discord-link]: https://discord.com/invite/W6vYXmAQG2
[contributing-link]: https://github.com/jumpserver/jumpserver/blob/dev/CONTRIBUTING.md
<!-- JumpServer Other link-->
[license-link]: https://www.gnu.org/licenses/gpl-3.0.html
[docker-link]: https://hub.docker.com/u/jumpserver
[github-release-link]: https://github.com/jumpserver/jumpserver/releases/latest
[github-stars-link]: https://github.com/jumpserver/jumpserver
[github-issues-link]: https://github.com/jumpserver/jumpserver/issues
<!-- Shield link-->
[github-release-shield]: https://img.shields.io/github/v/release/jumpserver/jumpserver
[github-stars-shield]: https://img.shields.io/github/stars/jumpserver/jumpserver?color=%231890FF&style=flat-square
[docker-shield]: https://img.shields.io/docker/pulls/jumpserver/jms_all.svg
[license-shield]: https://img.shields.io/github/license/jumpserver/jumpserver
[discord-shield]: https://img.shields.io/discord/1194233267294052363?style=flat&logo=discord&logoColor=%23f5f5f5&labelColor=%235462eb&color=%235462eb
<!-- Image link -->

121
README.zh-CN.md Normal file
View File

@@ -0,0 +1,121 @@
<p align="center">
<a href="https://jumpserver.org"><img src="https://download.jumpserver.org/images/jumpserver-logo.svg" alt="JumpServer" width="300" /></a>
</p>
<h3 align="center">广受欢迎的开源堡垒机</h3>
<p align="center">
<a href="https://www.gnu.org/licenses/gpl-3.0.html"><img src="https://img.shields.io/github/license/jumpserver/jumpserver" alt="License: GPLv3"></a>
<a href="https://hub.docker.com/u/jumpserver"><img src="https://img.shields.io/docker/pulls/jumpserver/jms_all.svg" alt="Docker pulls"></a>
<a href="https://github.com/jumpserver/jumpserver/releases/latest"><img src="https://img.shields.io/github/v/release/jumpserver/jumpserver" alt="Latest release"></a>
<a href="https://github.com/jumpserver/jumpserver"><img src="https://img.shields.io/github/stars/jumpserver/jumpserver?color=%231890FF&style=flat-square" alt="Stars"></a>
</p>
<p align="center">
10 年时间,倾情投入,用心做好一款开源堡垒机。
</p>
------------------------------
## JumpServer 是什么?
JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpServer 堡垒机帮助企业以更安全的方式管控和登录各种类型的资产,包括:
- **SSH**: Linux / Unix / 网络设备 等;
- **Windows**: Web 方式连接 / 原生 RDP 连接;
- **数据库**: MySQL / MariaDB / PostgreSQL / Oracle / SQLServer / ClickHouse 等;
- **NoSQL**: Redis / MongoDB 等;
- **GPT**: ChatGPT 等;
- **云服务**: Kubernetes / VMware vSphere 等;
- **Web 站点**: 各类系统的 Web 管理后台;
- **应用**: 通过 Remote App 连接各类应用。
## 产品特色
- **开源**: 零门槛,线上快速获取和安装;
- **无插件**: 仅需浏览器,极致的 Web Terminal 使用体验;
- **分布式**: 支持分布式部署和横向扩展,轻松支持大规模并发访问;
- **多云支持**: 一套系统,同时管理不同云上面的资产;
- **多租户**: 一套系统,多个子公司或部门同时使用;
- **云端存储**: 审计录像云端存储,永不丢失;
## 快速开始
- [快速入门](https://docs.jumpserver.org/zh/v3/quick_start/)
- [产品文档](https://docs.jumpserver.org)
- [在线学习](https://edu.fit2cloud.com/page/2635362)
- [知识库](https://kb.fit2cloud.com/categories/jumpserver)
## UI 展示
![UI展示](https://docs.jumpserver.org/zh/v3/img/dashboard.png)
## 在线体验
- 环境地址:<https://demo.jumpserver.org/>
| :warning: 注意 |
|:-----------------------------|
| 该环境仅作体验目的使用,我们会定时清理、重置数据! |
| 请勿修改体验环境用户的密码! |
| 请勿在环境中添加业务生产环境地址、用户名密码等敏感信息! |
## 案例研究
- [腾讯音乐娱乐集团基于JumpServer的安全运维审计解决方案](https://blog.fit2cloud.com/?p=a04cdf0d-6704-4d18-9b40-9180baecd0e2)
- [腾讯海外游戏基于JumpServer构建游戏安全运营能力](https://blog.fit2cloud.com/?p=3704)
- [万华化学通过JumpServer管理全球化分布式IT资产并且实现与云管平台的联动](https://blog.fit2cloud.com/?p=3504)
- [雪花啤酒JumpServer堡垒机使用体会](https://blog.fit2cloud.com/?p=3412)
- [顺丰科技JumpServer 堡垒机护航顺丰科技超大规模资产安全运维](https://blog.fit2cloud.com/?p=1147)
- [沐瞳游戏通过JumpServer管控多项目分布式资产](https://blog.fit2cloud.com/?p=3213)
- [携程JumpServer 堡垒机部署与运营实战](https://blog.fit2cloud.com/?p=851)
- [大智慧JumpServer 堡垒机让“大智慧”的混合 IT 运维更智慧](https://blog.fit2cloud.com/?p=882)
- [小红书JumpServer 堡垒机大规模资产跨版本迁移之路](https://blog.fit2cloud.com/?p=516)
- [中手游JumpServer堡垒机助力中手游提升多云环境下安全运维能力](https://blog.fit2cloud.com/?p=732)
- [中通快递JumpServer主机安全运维实践](https://blog.fit2cloud.com/?p=708)
- [东方明珠JumpServer高效管控异构化、分布式云端资产](https://blog.fit2cloud.com/?p=687)
- [江苏农信JumpServer堡垒机助力行业云安全运维](https://blog.fit2cloud.com/?p=666)
## 社区交流
如果您在使用过程中有任何疑问或对建议,欢迎提交 [GitHub Issue](https://github.com/jumpserver/jumpserver/issues/new/choose)。
您也可以到我们的 [社区论坛](https://bbs.fit2cloud.com/c/js/5) 当中进行交流沟通。
## 参与贡献
欢迎提交 PR 参与贡献。 参考 [CONTRIBUTING.md](https://github.com/jumpserver/jumpserver/blob/dev/CONTRIBUTING.md)
## 组件项目
| Project | Status | Description |
|--------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| [Lina](https://github.com/jumpserver/lina) | <a href="https://github.com/jumpserver/lina/releases"><img alt="Lina release" src="https://img.shields.io/github/release/jumpserver/lina.svg" /></a> | JumpServer Web UI |
| [Luna](https://github.com/jumpserver/luna) | <a href="https://github.com/jumpserver/luna/releases"><img alt="Luna release" src="https://img.shields.io/github/release/jumpserver/luna.svg" /></a> | JumpServer Web Terminal |
| [KoKo](https://github.com/jumpserver/koko) | <a href="https://github.com/jumpserver/koko/releases"><img alt="Koko release" src="https://img.shields.io/github/release/jumpserver/koko.svg" /></a> | JumpServer Character Protocol Connector |
| [Lion](https://github.com/jumpserver/lion) | <a href="https://github.com/jumpserver/lion/releases"><img alt="Lion release" src="https://img.shields.io/github/release/jumpserver/lion.svg" /></a> | JumpServer Graphical Protocol Connector |
| [Chen](https://github.com/jumpserver/chen) | <a href="https://github.com/jumpserver/chen/releases"><img alt="Chen release" src="https://img.shields.io/github/release/jumpserver/chen.svg" /> | JumpServer Web DB |
| [Razor](https://github.com/jumpserver/razor) | <img alt="Chen" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE RDP Proxy Connector |
| [Tinker](https://github.com/jumpserver/tinker) | <img alt="Tinker" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE Remote Application Connector (Windows) |
| [Panda](https://github.com/jumpserver/Panda) | <img alt="Panda" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE Remote Application Connector (Linux) |
| [Magnus](https://github.com/jumpserver/magnus) | <img alt="Magnus" src="https://img.shields.io/badge/release-private-red" /> | JumpServer EE Database Proxy Connector |
## 安全说明
JumpServer是一款安全产品请参考 [基本安全建议](https://docs.jumpserver.org/zh/master/install/install_security/)
进行安装部署。如果您发现安全相关问题,请直接联系我们:
- 邮箱support@fit2cloud.com
- 电话400-052-0755
## License & Copyright
Copyright (c) 2014-2024 飞致云 FIT2CLOUD, All rights reserved.
Licensed under The GNU General Public License version 3 (GPLv3) (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
https://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "
AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License.

View File

@@ -1,94 +0,0 @@
<p align="center"><a href="https://jumpserver.org"><img src="https://download.jumpserver.org/images/jumpserver-logo.svg" alt="JumpServer" width="300" /></a></p>
<h3 align="center">Open Source Bastion Host</h3>
<p align="center">
<a href="https://www.gnu.org/licenses/gpl-3.0.html"><img src="https://img.shields.io/github/license/jumpserver/jumpserver" alt="License: GPLv3"></a>
<a href="https://shields.io/github/downloads/jumpserver/jumpserver/total"><img src="https://shields.io/github/downloads/jumpserver/jumpserver/total" alt=" release"></a>
<a href="https://hub.docker.com/u/jumpserver"><img src="https://img.shields.io/docker/pulls/jumpserver/jms_all.svg" alt="Codacy"></a>
<a href="https://github.com/jumpserver/jumpserver"><img src="https://img.shields.io/github/stars/jumpserver/jumpserver?color=%231890FF&style=flat-square" alt="Stars"></a>
</p>
JumpServer is the world's first open-source Bastion Host and is licensed under the GPLv3. It is a 4A-compliant professional operation and maintenance security audit system.
JumpServer uses Python / Django for development, follows Web 2.0 specifications, and is equipped with an industry-leading Web Terminal solution that provides a beautiful user interface and great user experience
JumpServer adopts a distributed architecture to support multi-branch deployment across multiple cross-regional areas. The central node provides APIs, and login nodes are deployed in each branch. It can be scaled horizontally without concurrency restrictions.
Change the world by taking every little step
----
### Advantages
- Open Source: huge transparency and free to access with quick installation process.
- Distributed: support large-scale concurrent access with ease.
- No Plugin required: all you need is a browser, the ultimate Web Terminal experience.
- Multi-Cloud supported: a unified system to manage assets on different clouds at the same time
- Cloud storage: audit records are stored in the cloud. Data lost no more!
- Multi-Tenant system: multiple subsidiary companies or departments access the same system simultaneously.
- Many applications supported: link to databases, windows remote applications, and Kubernetes cluster, etc.
### JumpServer Component Projects
- [Lina](https://github.com/jumpserver/lina) JumpServer Web UI
- [Luna](https://github.com/jumpserver/luna) JumpServer Web Terminal
- [KoKo](https://github.com/jumpserver/koko) JumpServer Character protocaol Connector, replace original Python Version [Coco](https://github.com/jumpserver/coco)
- [Lion](https://github.com/jumpserver/lion-release) JumpServer Graphics protocol Connectorrely on [Apache Guacamole](https://guacamole.apache.org/)
### Contribution
If you have any good ideas or helping us to fix bugs, please submit a Pull Request and accept our thanks :)
Thanks to the following contributors for making JumpServer better everyday!
<a href="https://github.com/jumpserver/jumpserver/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jumpserver/jumpserver" />
</a>
<a href="https://github.com/jumpserver/koko/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jumpserver/koko" />
</a>
<a href="https://github.com/jumpserver/lina/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jumpserver/lina" />
</a>
<a href="https://github.com/jumpserver/luna/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jumpserver/luna" />
</a>
### Thanks to
- [Apache Guacamole](https://guacamole.apache.org/) Web page connection RDP, SSH, VNC protocol equipment. JumpServer graphical connection dependent.
- [OmniDB](https://omnidb.org/) Web page connection to databases. JumpServer Web database dependent.
### JumpServer Enterprise Version
- [Apply for it](https://jinshuju.net/f/kyOYpi)
### Case Study
- [JumpServer 堡垒机护航顺丰科技超大规模资产安全运维](https://blog.fit2cloud.com/?p=1147)
- [JumpServer 堡垒机让“大智慧”的混合 IT 运维更智慧](https://blog.fit2cloud.com/?p=882)
- [携程 JumpServer 堡垒机部署与运营实战](https://blog.fit2cloud.com/?p=851)
- [小红书的JumpServer堡垒机大规模资产跨版本迁移之路](https://blog.fit2cloud.com/?p=516)
- [JumpServer堡垒机助力中手游提升多云环境下安全运维能力](https://blog.fit2cloud.com/?p=732)
- [中通快递JumpServer主机安全运维实践](https://blog.fit2cloud.com/?p=708)
- [东方明珠JumpServer高效管控异构化、分布式云端资产](https://blog.fit2cloud.com/?p=687)
- [江苏农信JumpServer堡垒机助力行业云安全运维](https://blog.fit2cloud.com/?p=666)。
### For safety instructions
JumpServer is a security product. Please refer to [Basic Security Recommendations](https://docs.jumpserver.org/zh/master/install/install_security/) for deployment and installation.
If you find a security problem, please contact us directly
- ibuler@fit2cloud.com
- support@fit2cloud.com
- 400-052-0755
### License & Copyright
Copyright (c) 2014-2022 FIT2CLOUD Tech, Inc., All rights reserved.
Licensed under The GNU General Public License version 3 (GPLv3) (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
https://www.gnu.org/licenses/gpl-3.0.htmll
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

View File

@@ -1,9 +1,13 @@
from django.db.models import Q
from rest_framework.generics import CreateAPIView
from rest_framework.response import Response
from accounts import serializers
from accounts.tasks import verify_accounts_connectivity_task, push_accounts_to_assets_task
from assets.exceptions import NotSupportedTemporarilyError
from accounts.models import Account
from accounts.permissions import AccountTaskActionPermission
from accounts.tasks import (
remove_accounts_task, verify_accounts_connectivity_task, push_accounts_to_assets_task
)
from authentication.permissions import UserConfirmation, ConfirmType
__all__ = [
'AccountsTaskCreateAPI',
@@ -12,40 +16,48 @@ __all__ = [
class AccountsTaskCreateAPI(CreateAPIView):
serializer_class = serializers.AccountTaskSerializer
permission_classes = (AccountTaskActionPermission,)
def check_permissions(self, request):
act = request.data.get('action')
if act == 'push':
code = 'accounts.push_account'
else:
code = 'accounts.verify_account'
has = request.user.has_perm(code)
if not has:
self.permission_denied(request)
def get_permissions(self):
act = self.request.data.get('action')
if act == 'remove':
self.permission_classes = [
AccountTaskActionPermission,
UserConfirmation.require(ConfirmType.PASSWORD)
]
return super().get_permissions()
@staticmethod
def get_account_ids(data, action):
account_type = 'gather_accounts' if action == 'remove' else 'accounts'
accounts = data.get(account_type, [])
account_ids = [str(a.id) for a in accounts]
if action == 'remove':
return account_ids
assets = data.get('assets', [])
asset_ids = [str(a.id) for a in assets]
ids = Account.objects.filter(
Q(id__in=account_ids) | Q(asset_id__in=asset_ids)
).distinct().values_list('id', flat=True)
return [str(_id) for _id in ids]
def perform_create(self, serializer):
data = serializer.validated_data
accounts = data.get('accounts', [])
params = data.get('params')
account_ids = [str(a.id) for a in accounts]
action = data['action']
ids = self.get_account_ids(data, action)
if data['action'] == 'push':
task = push_accounts_to_assets_task.delay(account_ids, params)
if action == 'push':
task = push_accounts_to_assets_task.delay(ids, data.get('params'))
elif action == 'remove':
task = remove_accounts_task.delay(ids)
elif action == 'verify':
task = verify_accounts_connectivity_task.delay(ids)
else:
account = accounts[0]
asset = account.asset
if not asset.auto_config['ansible_enabled'] or \
not asset.auto_config['ping_enabled']:
raise NotSupportedTemporarilyError()
task = verify_accounts_connectivity_task.delay(account_ids)
raise ValueError(f"Invalid action: {action}")
data = getattr(serializer, '_data', {})
data["task"] = task.id
setattr(serializer, '_data', data)
return task
def get_exception_handler(self):
def handler(e, context):
return Response({"error": str(e)}, status=401)
return handler

View File

@@ -18,9 +18,8 @@ __all__ = [
class AccountBackupPlanViewSet(OrgBulkModelViewSet):
model = AccountBackupAutomation
filter_fields = ('name',)
search_fields = filter_fields
ordering = ('name',)
filterset_fields = ('name',)
search_fields = filterset_fields
serializer_class = serializers.AccountBackupSerializer

View File

@@ -20,8 +20,8 @@ __all__ = [
class AutomationAssetsListApi(generics.ListAPIView):
model = BaseAutomation
serializer_class = serializers.AutomationAssetsSerializer
filter_fields = ("name", "address")
search_fields = filter_fields
filterset_fields = ("name", "address")
search_fields = filterset_fields
def get_object(self):
pk = self.kwargs.get('pk')

View File

@@ -1,12 +1,17 @@
# -*- coding: utf-8 -*-
#
from rest_framework import mixins
from rest_framework import status, mixins
from rest_framework.decorators import action
from rest_framework.response import Response
from accounts import serializers
from accounts.const import AutomationTypes
from accounts.filters import ChangeSecretRecordFilterSet
from accounts.models import ChangeSecretAutomation, ChangeSecretRecord
from accounts.tasks import execute_automation_record_task
from authentication.permissions import UserConfirmation, ConfirmType
from orgs.mixins.api import OrgBulkModelViewSet, OrgGenericViewSet
from rbac.permissions import RBACPermission
from .base import (
AutomationAssetsListApi, AutomationRemoveAssetApi, AutomationAddAssetApi,
AutomationNodeAddRemoveApi, AutomationExecutionViewSet
@@ -22,25 +27,53 @@ __all__ = [
class ChangeSecretAutomationViewSet(OrgBulkModelViewSet):
model = ChangeSecretAutomation
filter_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filter_fields
filterset_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filterset_fields
serializer_class = serializers.ChangeSecretAutomationSerializer
class ChangeSecretRecordViewSet(mixins.ListModelMixin, OrgGenericViewSet):
serializer_class = serializers.ChangeSecretRecordSerializer
filter_fields = ('asset', 'execution_id')
filterset_class = ChangeSecretRecordFilterSet
search_fields = ('asset__address',)
tp = AutomationTypes.change_secret
serializer_classes = {
'default': serializers.ChangeSecretRecordSerializer,
'secret': serializers.ChangeSecretRecordViewSecretSerializer,
}
rbac_perms = {
'execute': 'accounts.add_changesecretexecution',
'secret': 'accounts.view_changesecretrecord',
}
def get_permissions(self):
if self.action == 'secret':
self.permission_classes = [
RBACPermission,
UserConfirmation.require(ConfirmType.MFA)
]
return super().get_permissions()
def get_queryset(self):
return ChangeSecretRecord.objects.filter(
execution__automation__type=AutomationTypes.change_secret
)
return ChangeSecretRecord.objects.all()
def filter_queryset(self, queryset):
queryset = super().filter_queryset(queryset)
eid = self.request.query_params.get('execution_id')
return queryset.filter(execution_id=eid)
@action(methods=['post'], detail=False, url_path='execute')
def execute(self, request, *args, **kwargs):
record_ids = request.data.get('record_ids')
records = self.get_queryset().filter(id__in=record_ids)
execution_count = records.values_list('execution_id', flat=True).distinct().count()
if execution_count != 1:
return Response(
{'detail': 'Only one execution is allowed to execute'},
status=status.HTTP_400_BAD_REQUEST
)
task = execute_automation_record_task.delay(record_ids, self.tp)
return Response({'task': task.id}, status=status.HTTP_200_OK)
@action(methods=['get'], detail=True, url_path='secret')
def secret(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
class ChangSecretExecutionViewSet(AutomationExecutionViewSet):

View File

@@ -20,8 +20,8 @@ __all__ = [
class GatherAccountsAutomationViewSet(OrgBulkModelViewSet):
model = GatherAccountsAutomation
filter_fields = ('name',)
search_fields = filter_fields
filterset_fields = ('name',)
search_fields = filterset_fields
serializer_class = serializers.GatherAccountAutomationSerializer

View File

@@ -20,8 +20,8 @@ __all__ = [
class PushAccountAutomationViewSet(OrgBulkModelViewSet):
model = PushAccountAutomation
filter_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filter_fields
filterset_fields = ('name', 'secret_type', 'secret_strategy')
search_fields = filterset_fields
serializer_class = serializers.PushAccountAutomationSerializer
@@ -42,6 +42,7 @@ class PushAccountExecutionViewSet(AutomationExecutionViewSet):
class PushAccountRecordViewSet(ChangeSecretRecordViewSet):
serializer_class = serializers.ChangeSecretRecordSerializer
tp = AutomationTypes.push_account
def get_queryset(self):
return ChangeSecretRecord.objects.filter(

View File

@@ -4,6 +4,7 @@ from django.apps import AppConfig
class AccountsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'accounts'
verbose_name = 'App Accounts'
def ready(self):
from . import signal_handlers # noqa

View File

@@ -3,17 +3,25 @@ import time
from collections import defaultdict, OrderedDict
from django.conf import settings
from openpyxl import Workbook
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from xlsxwriter import Workbook
from accounts.notifications import AccountBackupExecutionTaskMsg
from accounts.const import AccountBackupType
from accounts.models.automations.backup_account import AccountBackupAutomation
from accounts.notifications import AccountBackupExecutionTaskMsg, AccountBackupByObjStorageExecutionTaskMsg
from accounts.serializers import AccountSecretSerializer
from assets.const import AllTypes
from common.utils.file import encrypt_and_compress_zip_file
from common.utils.timezone import local_now_display
from common.utils.file import encrypt_and_compress_zip_file, zip_files
from common.utils.timezone import local_now_filename, local_now_display
from terminal.models.component.storage import ReplayStorage
from users.models import User
PATH = os.path.join(os.path.dirname(settings.BASE_DIR), 'tmp')
split_help_text = _('The account key will be split into two parts and sent')
class RecipientsNotFound(Exception):
pass
class BaseAccountHandler:
@@ -67,7 +75,7 @@ class AssetAccountHandler(BaseAccountHandler):
@staticmethod
def get_filename(plan_name):
filename = os.path.join(
PATH, f'{plan_name}-{local_now_display()}-{time.time()}.xlsx'
PATH, f'{plan_name}-{local_now_filename()}-{time.time()}.xlsx'
)
return filename
@@ -108,8 +116,8 @@ class AssetAccountHandler(BaseAccountHandler):
data = AccountSecretSerializer(_accounts, many=True).data
cls.handler_secret(data, section)
data_map.update(cls.add_rows(data, header_fields, sheet_name))
print('\n\033[33m- 共备份 {} 条账号\033[0m'.format(accounts.count()))
number_of_backup_accounts = _('Number of backup accounts')
print('\n\033[33m- {}: {}\033[0m'.format(number_of_backup_accounts, accounts.count()))
return data_map
@@ -120,9 +128,10 @@ class AccountBackupHandler:
self.is_frozen = False # 任务状态冻结标志
def create_excel(self, section='complete'):
hint = _('Generating asset or application related backup information files')
print(
'\n'
'\033[32m>>> 正在生成资产或应用相关备份信息文件\033[0m'
f'\033[32m>>> {hint}\033[0m'
''
)
# Print task start date
@@ -137,13 +146,16 @@ class AccountBackupHandler:
wb = Workbook(filename)
for sheet, data in data_map.items():
ws = wb.create_sheet(str(sheet))
for row in data:
ws.append(row)
wb.save(filename)
ws = wb.add_worksheet(str(sheet))
for row_index, row_data in enumerate(data):
for col_index, col_data in enumerate(row_data):
ws.write_string(row_index, col_index, col_data)
wb.close()
files.append(filename)
timedelta = round((time.time() - time_start), 2)
print('步骤完成: 用时 {}s'.format(timedelta))
time_cost = _('Time cost')
file_created = _('Backup file creation completed')
print('{}: {} {}s'.format(file_created, time_cost, timedelta))
return files
def send_backup_mail(self, files, recipients):
@@ -152,7 +164,7 @@ class AccountBackupHandler:
recipients = User.objects.filter(id__in=list(recipients))
print(
'\n'
'\033[32m>>> 发送备份邮件\033[0m'
f'\033[32m>>> {_("Start sending backup emails")}\033[0m'
''
)
plan_name = self.plan_name
@@ -160,12 +172,37 @@ class AccountBackupHandler:
if not user.secret_key:
attachment_list = []
else:
password = user.secret_key.encode('utf8')
attachment = os.path.join(PATH, f'{plan_name}-{local_now_display()}-{time.time()}.zip')
encrypt_and_compress_zip_file(attachment, password, files)
attachment = os.path.join(PATH, f'{plan_name}-{local_now_filename()}-{time.time()}.zip')
encrypt_and_compress_zip_file(attachment, user.secret_key, files)
attachment_list = [attachment, ]
AccountBackupExecutionTaskMsg(plan_name, user).publish(attachment_list)
print('邮件已发送至{}({})'.format(user, user.email))
email_sent_to = _('Email sent to')
print('{} {}({})'.format(email_sent_to, user, user.email))
for file in files:
os.remove(file)
def send_backup_obj_storage(self, files, recipients, password):
if not files:
return
recipients = ReplayStorage.objects.filter(id__in=list(recipients))
print(
'\n'
'\033[32m>>> 📃 ---> sftp \033[0m'
''
)
plan_name = self.plan_name
encrypt_file = _('Encrypting files using encryption password')
for rec in recipients:
attachment = os.path.join(PATH, f'{plan_name}-{local_now_filename()}-{time.time()}.zip')
if password:
print(f'\033[32m>>> {encrypt_file}\033[0m')
encrypt_and_compress_zip_file(attachment, password, files)
else:
zip_files(attachment, files)
attachment_list = attachment
AccountBackupByObjStorageExecutionTaskMsg(plan_name, rec).publish(attachment_list)
file_sent_to = _('The backup file will be sent to')
print('{}: {}({})'.format(file_sent_to, rec.name, rec.id))
for file in files:
os.remove(file)
@@ -173,41 +210,27 @@ class AccountBackupHandler:
self.execution.reason = reason[:1024]
self.execution.is_success = is_success
self.execution.save()
print('已完成对任务状态的更新')
finish = _('Finish')
print(f'\n{finish}\n')
@staticmethod
def step_finished(is_success):
if is_success:
print('任务执行成功')
print(_('Success'))
else:
print('任务执行失败')
print(_('Failed'))
def _run(self):
is_success = False
error = '-'
try:
recipients_part_one = self.execution.snapshot.get('recipients_part_one', [])
recipients_part_two = self.execution.snapshot.get('recipients_part_two', [])
if not recipients_part_one and not recipients_part_two:
print(
'\n'
'\033[32m>>> 该备份任务未分配收件人\033[0m'
''
)
if recipients_part_one and recipients_part_two:
files = self.create_excel(section='front')
self.send_backup_mail(files, recipients_part_one)
files = self.create_excel(section='back')
self.send_backup_mail(files, recipients_part_two)
else:
recipients = recipients_part_one or recipients_part_two
files = self.create_excel()
self.send_backup_mail(files, recipients)
backup_type = self.execution.snapshot.get('backup_type', AccountBackupType.email.value)
if backup_type == AccountBackupType.email.value:
self.backup_by_email()
elif backup_type == AccountBackupType.object_storage.value:
self.backup_by_obj_storage()
except Exception as e:
self.is_frozen = True
print('任务执行被异常中断')
print('下面打印发生异常的 Traceback 信息 : ')
print(e)
error = str(e)
else:
@@ -217,16 +240,68 @@ class AccountBackupHandler:
self.step_perform_task_update(is_success, reason)
self.step_finished(is_success)
def backup_by_obj_storage(self):
object_id = self.execution.snapshot.get('id')
zip_encrypt_password = AccountBackupAutomation.objects.get(id=object_id).zip_encrypt_password
obj_recipients_part_one = self.execution.snapshot.get('obj_recipients_part_one', [])
obj_recipients_part_two = self.execution.snapshot.get('obj_recipients_part_two', [])
no_assigned_sftp_server = _('The backup task has no assigned sftp server')
if not obj_recipients_part_one and not obj_recipients_part_two:
print(
'\n'
f'\033[31m>>> {no_assigned_sftp_server}\033[0m'
''
)
raise RecipientsNotFound('Not Found Recipients')
if obj_recipients_part_one and obj_recipients_part_two:
print(f'\033[32m>>> {split_help_text}\033[0m')
files = self.create_excel(section='front')
self.send_backup_obj_storage(files, obj_recipients_part_one, zip_encrypt_password)
files = self.create_excel(section='back')
self.send_backup_obj_storage(files, obj_recipients_part_two, zip_encrypt_password)
else:
recipients = obj_recipients_part_one or obj_recipients_part_two
files = self.create_excel()
self.send_backup_obj_storage(files, recipients, zip_encrypt_password)
def backup_by_email(self):
warn_text = _('The backup task has no assigned recipient')
recipients_part_one = self.execution.snapshot.get('recipients_part_one', [])
recipients_part_two = self.execution.snapshot.get('recipients_part_two', [])
if not recipients_part_one and not recipients_part_two:
print(
'\n'
f'\033[31m>>> {warn_text}\033[0m'
''
)
raise RecipientsNotFound('Not Found Recipients')
if recipients_part_one and recipients_part_two:
print(f'\033[32m>>> {split_help_text}\033[0m')
files = self.create_excel(section='front')
self.send_backup_mail(files, recipients_part_one)
files = self.create_excel(section='back')
self.send_backup_mail(files, recipients_part_two)
else:
recipients = recipients_part_one or recipients_part_two
files = self.create_excel()
self.send_backup_mail(files, recipients)
def run(self):
print('任务开始: {}'.format(local_now_display()))
plan_start = _('Plan start')
plan_end = _('Plan end')
time_cost = _('Time cost')
error = _('An exception occurred during task execution')
print('{}: {}'.format(plan_start, local_now_display()))
time_start = time.time()
try:
self._run()
except Exception as e:
print('任务运行出现异常')
print('下面显示异常 Traceback 信息: ')
print(error)
print(e)
finally:
print('\n任务结束: {}'.format(local_now_display()))
print('\n{}: {}'.format(plan_end, local_now_display()))
timedelta = round((time.time() - time_start), 2)
print('用时: {}'.format(timedelta))
print('{}: {}s'.format(time_cost, timedelta))

View File

@@ -3,6 +3,7 @@
import time
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from common.utils.timezone import local_now_display
from .handlers import AccountBackupHandler
@@ -19,7 +20,8 @@ class AccountBackupManager:
def do_run(self):
execution = self.execution
print('\n\033[33m# 账号备份计划正在执行\033[0m')
account_backup_execution_being_executed = _('The account backup plan is being executed')
print(f'\n\033[33m# {account_backup_execution_being_executed}\033[0m')
handler = AccountBackupHandler(execution)
handler.run()
@@ -32,9 +34,11 @@ class AccountBackupManager:
self.date_end = timezone.now()
print('\n\n' + '-' * 80)
print('计划执行结束 {}\n'.format(local_now_display()))
plan_execution_end = _('Plan execution end')
print('{} {}\n'.format(plan_execution_end, local_now_display()))
self.timedelta = self.time_end - self.time_start
print('用时: {}s'.format(self.timedelta))
time_cost = _('Time cost')
print('{}: {}s'.format(time_cost, self.timedelta))
self.execution.timedelta = self.timedelta
self.execution.save()

View File

@@ -13,12 +13,15 @@
login_password: "{{ jms_account.secret }}"
login_secret_type: "{{ jms_account.secret_type }}"
login_private_key_path: "{{ jms_account.private_key_path }}"
become: "{{ custom_become | default(False) }}"
become_method: "{{ custom_become_method | default('su') }}"
become_user: "{{ custom_become_user | default('') }}"
become_password: "{{ custom_become_password | default('') }}"
become_private_key_path: "{{ custom_become_private_key_path | default(None) }}"
become: "{{ jms_custom_become | default(False) }}"
become_method: "{{ jms_custom_become_method | default('su') }}"
become_user: "{{ jms_custom_become_user | default('') }}"
become_password: "{{ jms_custom_become_password | default('') }}"
become_private_key_path: "{{ jms_custom_become_private_key_path | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
register: ping_info
delegate_to: localhost
- name: Change asset password (paramiko)
custom_command:
@@ -28,11 +31,11 @@
login_port: "{{ jms_asset.port }}"
login_secret_type: "{{ jms_account.secret_type }}"
login_private_key_path: "{{ jms_account.private_key_path }}"
become: "{{ custom_become | default(False) }}"
become_method: "{{ custom_become_method | default('su') }}"
become_user: "{{ custom_become_user | default('') }}"
become_password: "{{ custom_become_password | default('') }}"
become_private_key_path: "{{ custom_become_private_key_path | default(None) }}"
become: "{{ jms_custom_become | default(False) }}"
become_method: "{{ jms_custom_become_method | default('su') }}"
become_user: "{{ jms_custom_become_user | default('') }}"
become_password: "{{ jms_custom_become_password | default('') }}"
become_private_key_path: "{{ jms_custom_become_private_key_path | default(None) }}"
name: "{{ account.username }}"
password: "{{ account.secret }}"
commands: "{{ params.commands }}"
@@ -40,6 +43,7 @@
ignore_errors: true
when: ping_info is succeeded
register: change_info
delegate_to: localhost
- name: Verify password (paramiko)
ssh_ping:
@@ -52,3 +56,6 @@
become_user: "{{ account.become.ansible_user | default('') }}"
become_password: "{{ account.become.ansible_password | default('') }}"
become_private_key_path: "{{ account.become.ansible_ssh_private_key_file | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
delegate_to: localhost

View File

@@ -6,15 +6,27 @@ category:
type:
- all
method: change_secret
protocol: ssh
priority: 50
params:
- name: commands
type: list
label: '自定义命令'
label: "{{ 'Params commands label' | trans }}"
default: [ '' ]
help_text: '自定义命令中如需包含账号的 账号、密码、SSH 连接的用户密码 字段,<br />请使用 &#123;username&#125;、&#123;password&#125;、&#123;login_password&#125;格式,执行任务时会进行替换 。<br />比如针对 Cisco 主机进行改密,一般需要配置五条命令:<br />1. enable<br />2. &#123;login_password&#125;<br />3. configure terminal<br />4. username &#123;username&#125; privilege 0 password &#123;password&#125; <br />5. end'
help_text: "{{ 'Params commands help text' | trans }}"
i18n:
SSH account change secret:
zh: 使用 SSH 命令行自定义改密
ja: SSH コマンドライン方式でカスタムパスワード変更
en: Custom password change by SSH command line
zh: '使用 SSH 命令行自定义改密'
ja: 'SSH コマンドライン方式でカスタムパスワード変更'
en: 'Custom password change by SSH command line'
Params commands help text:
zh: '自定义命令中如需包含账号的 账号、密码、SSH 连接的用户密码 字段,<br />请使用 &#123;username&#125;、&#123;password&#125;、&#123;login_password&#125;格式,执行任务时会进行替换 。<br />比如针对 Cisco 主机进行改密,一般需要配置五条命令:<br />1. enable<br />2. &#123;login_password&#125;<br />3. configure terminal<br />4. username &#123;username&#125; privilege 0 password &#123;password&#125; <br />5. end'
ja: 'カスタム コマンドに SSH 接続用のアカウント番号、パスワード、ユーザー パスワード フィールドを含める必要がある場合は、<br />&#123;ユーザー名&#125;、&#123;パスワード&#125;、&#123;login_password& を使用してください。 # 125; 形式。タスクの実行時に置き換えられます。 <br />たとえば、Cisco ホストのパスワードを変更するには、通常、次の 5 つのコマンドを設定する必要があります:<br />1.enable<br />2.&#123;login_password&#125;<br />3 .ターミナルの設定<br / >4. ユーザー名 &#123;ユーザー名&#125; 権限 0 パスワード &#123;パスワード&#125; <br />5. 終了'
en: 'If the custom command needs to include the account number, password, and user password field for SSH connection,<br />Please use &#123;username&#125;, &#123;password&#125;, &#123;login_password&# 125; format, which will be replaced when executing the task. <br />For example, to change the password of a Cisco host, you generally need to configure five commands:<br />1. enable<br />2. &#123;login_password&#125;<br />3. configure terminal<br / >4. username &#123;username&#125; privilege 0 password &#123;password&#125; <br />5. end'
Params commands label:
zh: '自定义命令'
ja: 'カスタムコマンド'
en: 'Custom command'

View File

@@ -1,7 +1,7 @@
- hosts: mongodb
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Test MongoDB connection

View File

@@ -1,8 +1,12 @@
- hosts: mysql
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
db_name: "{{ jms_asset.spec_info.db_name }}"
check_ssl: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Test MySQL connection
@@ -11,10 +15,10 @@
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
filter: version
register: db_info
@@ -28,10 +32,10 @@
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
name: "{{ account.username }}"
password: "{{ account.secret }}"
host: "%"
@@ -45,8 +49,8 @@
login_password: "{{ account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
filter: version

View File

@@ -1,7 +1,7 @@
- hosts: oracle
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Test Oracle connection
@@ -39,3 +39,4 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
login_database: "{{ jms_asset.spec_info.db_name }}"
mode: "{{ account.mode }}"

View File

@@ -1,7 +1,11 @@
- hosts: postgre
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Test PostgreSQL connection
@@ -11,6 +15,10 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
login_db: "{{ jms_asset.spec_info.db_name }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
register: result
failed_when: not result.is_available
@@ -28,6 +36,10 @@
db: "{{ jms_asset.spec_info.db_name }}"
name: "{{ account.username }}"
password: "{{ account.secret }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
role_attr_flags: LOGIN
ignore_errors: true
when: result is succeeded
@@ -39,3 +51,7 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
db: "{{ jms_asset.spec_info.db_name }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"

View File

@@ -1,7 +1,7 @@
- hosts: sqlserver
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Test SQLServer connection

View File

@@ -14,51 +14,15 @@
- name: "Add {{ account.username }} user"
ansible.builtin.user:
name: "{{ account.username }}"
shell: "{{ params.shell }}"
home: "{{ params.home | default('/home/' + account.username, true) }}"
groups: "{{ params.groups }}"
uid: "{{ params.uid | int if params.uid | length > 0 else omit }}"
shell: "{{ params.shell if params.shell | length > 0 else omit }}"
home: "{{ params.home if params.home | length > 0 else '/home/' + account.username }}"
groups: "{{ params.groups if params.groups | length > 0 else omit }}"
append: yes
expires: -1
state: present
when: user_info.failed
- name: "Add {{ account.username }} group"
ansible.builtin.group:
name: "{{ account.username }}"
state: present
when: user_info.failed
- name: "Add {{ account.username }} user to group"
ansible.builtin.user:
name: "{{ account.username }}"
groups: "{{ params.groups }}"
when:
- user_info.failed
- params.groups
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('des') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ ssh_params.dest }}"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: "Set {{ account.username }} sudo setting"
ansible.builtin.lineinfile:
dest: /etc/sudoers
@@ -67,9 +31,59 @@
line: "{{ account.username + ' ALL=(ALL) NOPASSWD: ' + params.sudo }}"
validate: visudo -cf %s
when:
- user_info.failed
- user_info.failed or params.modify_sudo
- params.sudo
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('des') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: "Get home directory for {{ account.username }}"
ansible.builtin.shell: "getent passwd {{ account.username }} | cut -d: -f6"
register: home_dir
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Check if home directory exists for {{ account.username }}"
ansible.builtin.stat:
path: "{{ home_dir.stdout.strip() }}"
register: home_dir_stat
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Ensure {{ account.username }} home directory exists"
ansible.builtin.file:
path: "{{ home_dir.stdout.strip() }}"
state: directory
owner: "{{ account.username }}"
group: "{{ account.username }}"
mode: '0750'
when:
- account.secret_type == "ssh_key"
- home_dir_stat.stat.exists == false
ignore_errors: yes
- name: Remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ home_dir.stdout.strip() }}/.ssh/authorized_keys"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
ignore_errors: yes
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: Refresh connection
ansible.builtin.meta: reset_connection
@@ -79,12 +93,13 @@
login_password: "{{ account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
become: "{{ account.become.ansible_become | default(False) }}"
become_method: su
become_user: "{{ account.become.ansible_user | default('') }}"
become_password: "{{ account.become.ansible_password | default('') }}"
become_private_key_path: "{{ account.become.ansible_ssh_private_key_file | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "password"
delegate_to: localhost
@@ -94,6 +109,7 @@
login_port: "{{ jms_asset.port }}"
login_user: "{{ account.username }}"
login_private_key_path: "{{ account.private_key_path }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "ssh_key"
delegate_to: localhost

View File

@@ -5,6 +5,12 @@ type:
- AIX
method: change_secret
params:
- name: modify_sudo
type: bool
label: "{{ 'Modify sudo label' | trans }}"
default: False
help_text: "{{ 'Modify params sudo help text' | trans }}"
- name: sudo
type: str
label: 'Sudo'
@@ -28,12 +34,23 @@ params:
default: ''
help_text: "{{ 'Params groups help text' | trans }}"
- name: uid
type: str
label: "{{ 'Params uid label' | trans }}"
default: ''
help_text: "{{ 'Params uid help text' | trans }}"
i18n:
AIX account change secret:
zh: '使用 Ansible 模块 user 执行账号改密 (DES)'
ja: 'Ansible user モジュールを使用してアカウントのパスワード変更 (DES)'
en: 'Using Ansible module user to change account secret (DES)'
Modify params sudo help text:
zh: '如果用户存在可以修改sudo权限'
ja: 'ユーザーが存在する場合、sudo権限を変更できます'
en: 'If the user exists, sudo permissions can be modified'
Params sudo help text:
zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig'
@@ -49,6 +66,16 @@ i18n:
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
Params uid help text:
zh: '请输入用户ID'
ja: 'ユーザーIDを入力してください'
en: 'Please enter the user ID'
Modify sudo label:
zh: '修改 sudo 权限'
ja: 'sudo 権限を変更'
en: 'Modify sudo'
Params home label:
zh: '家目录'
ja: 'ホームディレクトリ'
@@ -59,3 +86,7 @@ i18n:
ja: 'グループ'
en: 'Groups'
Params uid label:
zh: '用户ID'
ja: 'ユーザーID'
en: 'User ID'

View File

@@ -14,51 +14,15 @@
- name: "Add {{ account.username }} user"
ansible.builtin.user:
name: "{{ account.username }}"
shell: "{{ params.shell }}"
home: "{{ params.home | default('/home/' + account.username, true) }}"
groups: "{{ params.groups }}"
uid: "{{ params.uid | int if params.uid | length > 0 else omit }}"
shell: "{{ params.shell if params.shell | length > 0 else omit }}"
home: "{{ params.home if params.home | length > 0 else '/home/' + account.username }}"
groups: "{{ params.groups if params.groups | length > 0 else omit }}"
append: yes
expires: -1
state: present
when: user_info.failed
- name: "Add {{ account.username }} group"
ansible.builtin.group:
name: "{{ account.username }}"
state: present
when: user_info.failed
- name: "Add {{ account.username }} user to group"
ansible.builtin.user:
name: "{{ account.username }}"
groups: "{{ params.groups }}"
when:
- user_info.failed
- params.groups
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('sha512') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ ssh_params.dest }}"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: "Set {{ account.username }} sudo setting"
ansible.builtin.lineinfile:
dest: /etc/sudoers
@@ -67,9 +31,59 @@
line: "{{ account.username + ' ALL=(ALL) NOPASSWD: ' + params.sudo }}"
validate: visudo -cf %s
when:
- user_info.failed
- user_info.failed or params.modify_sudo
- params.sudo
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('sha512') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: "Get home directory for {{ account.username }}"
ansible.builtin.shell: "getent passwd {{ account.username }} | cut -d: -f6"
register: home_dir
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Check if home directory exists for {{ account.username }}"
ansible.builtin.stat:
path: "{{ home_dir.stdout.strip() }}"
register: home_dir_stat
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Ensure {{ account.username }} home directory exists"
ansible.builtin.file:
path: "{{ home_dir.stdout.strip() }}"
state: directory
owner: "{{ account.username }}"
group: "{{ account.username }}"
mode: '0750'
when:
- account.secret_type == "ssh_key"
- home_dir_stat.stat.exists == false
ignore_errors: yes
- name: Remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ home_dir.stdout.strip() }}/.ssh/authorized_keys"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
ignore_errors: yes
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: Refresh connection
ansible.builtin.meta: reset_connection
@@ -79,12 +93,13 @@
login_password: "{{ account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
become: "{{ account.become.ansible_become | default(False) }}"
become_method: su
become_user: "{{ account.become.ansible_user | default('') }}"
become_password: "{{ account.become.ansible_password | default('') }}"
become_private_key_path: "{{ account.become.ansible_ssh_private_key_file | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "password"
delegate_to: localhost
@@ -94,6 +109,7 @@
login_port: "{{ jms_asset.port }}"
login_user: "{{ account.username }}"
login_private_key_path: "{{ account.private_key_path }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "ssh_key"
delegate_to: localhost

View File

@@ -6,6 +6,12 @@ type:
- linux
method: change_secret
params:
- name: modify_sudo
type: bool
label: "{{ 'Modify sudo label' | trans }}"
default: False
help_text: "{{ 'Modify params sudo help text' | trans }}"
- name: sudo
type: str
label: 'Sudo'
@@ -30,12 +36,23 @@ params:
default: ''
help_text: "{{ 'Params groups help text' | trans }}"
- name: uid
type: str
label: "{{ 'Params uid label' | trans }}"
default: ''
help_text: "{{ 'Params uid help text' | trans }}"
i18n:
Posix account change secret:
zh: '使用 Ansible 模块 user 执行账号改密 (SHA512)'
ja: 'Ansible user モジュールを使用して アカウントのパスワード変更 (SHA512)'
en: 'Using Ansible module user to change account secret (SHA512)'
Modify params sudo help text:
zh: '如果用户存在可以修改sudo权限'
ja: 'ユーザーが存在する場合、sudo権限を変更できます'
en: 'If the user exists, sudo permissions can be modified'
Params sudo help text:
zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig'
@@ -51,6 +68,16 @@ i18n:
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
Params uid help text:
zh: '请输入用户ID'
ja: 'ユーザーIDを入力してください'
en: 'Please enter the user ID'
Modify sudo label:
zh: '修改 sudo 权限'
ja: 'sudo 権限を変更'
en: 'Modify sudo'
Params home label:
zh: '家目录'
ja: 'ホームディレクトリ'
@@ -61,3 +88,7 @@ i18n:
ja: 'グループ'
en: 'Groups'
Params uid label:
zh: '用户ID'
ja: 'ユーザーID'
en: 'User ID'

View File

@@ -0,0 +1,35 @@
- hosts: demo
gather_facts: no
tasks:
- name: Test privileged account
ansible.windows.win_ping:
# - name: Print variables
# debug:
# msg: "Username: {{ account.username }}, Password: {{ account.secret }}"
- name: Change password
ansible.windows.win_user:
fullname: "{{ account.username}}"
name: "{{ account.username }}"
password: "{{ account.secret }}"
password_never_expires: yes
groups: "{{ params.groups }}"
groups_action: add
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: Refresh connection
ansible.builtin.meta: reset_connection
- name: Verify password (pyfreerdp)
rdp_ping:
login_host: "{{ jms_asset.origin_address }}"
login_port: "{{ jms_asset.protocols | selectattr('name', 'equalto', 'rdp') | map(attribute='port') | first }}"
login_user: "{{ account.username }}"
login_password: "{{ account.secret }}"
login_secret_type: "{{ account.secret_type }}"
gateway_args: "{{ jms_gateway | default({}) }}"
when: account.secret_type == "password"
delegate_to: localhost

View File

@@ -0,0 +1,27 @@
id: change_secret_windows_rdp_verify
name: "{{ 'Windows account change secret rdp verify' | trans }}"
version: 1
method: change_secret
category: host
type:
- windows
priority: 49
params:
- name: groups
type: str
label: '用户组'
default: 'Users,Remote Desktop Users'
help_text: "{{ 'Params groups help text' | trans }}"
i18n:
Windows account change secret rdp verify:
zh: '使用 Ansible 模块 win_user 执行 Windows 账号改密 RDP 协议测试最后的可连接性'
ja: 'Ansibleモジュールwin_userはWindowsアカウントの改密RDPプロトコルテストの最後の接続性を実行する'
en: 'Using the Ansible module win_user performs Windows account encryption RDP protocol testing for final connectivity'
Params groups help text:
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'

View File

@@ -1,20 +1,20 @@
import os
import time
from collections import defaultdict
from copy import deepcopy
from django.conf import settings
from django.utils import timezone
from openpyxl import Workbook
from django.utils.translation import gettext_lazy as _
from xlsxwriter import Workbook
from accounts.const import AutomationTypes, SecretType, SSHKeyStrategy, SecretStrategy
from accounts.models import ChangeSecretRecord
from accounts.notifications import ChangeSecretExecutionTaskMsg
from accounts.const import AutomationTypes, SecretType, SSHKeyStrategy, SecretStrategy, ChangeSecretRecordStatusChoice
from accounts.models import ChangeSecretRecord, BaseAccountQuerySet
from accounts.notifications import ChangeSecretExecutionTaskMsg, ChangeSecretFailedMsg
from accounts.serializers import ChangeSecretRecordBackUpSerializer
from assets.const import HostTypes
from common.utils import get_logger
from common.utils.file import encrypt_and_compress_zip_file
from common.utils.timezone import local_now_display
from common.utils.timezone import local_now_filename
from users.models import User
from ..base.manager import AccountBasePlaybookManager
from ...utils import SecretGenerator
@@ -27,7 +27,7 @@ class ChangeSecretManager(AccountBasePlaybookManager):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.method_hosts_mapper = defaultdict(list)
self.record_map = self.execution.snapshot.get('record_map', {})
self.secret_type = self.execution.snapshot.get('secret_type')
self.secret_strategy = self.execution.snapshot.get(
'secret_strategy', SecretStrategy.custom
@@ -50,7 +50,6 @@ class ChangeSecretManager(AccountBasePlaybookManager):
kwargs['exclusive'] = 'yes' if kwargs['strategy'] == SSHKeyStrategy.set else 'no'
if kwargs['strategy'] == SSHKeyStrategy.set_jms:
kwargs['dest'] = '/home/{}/.ssh/authorized_keys'.format(account.username)
kwargs['regexp'] = '.*{}$'.format(secret.split()[2].strip())
return kwargs
@@ -66,10 +65,10 @@ class ChangeSecretManager(AccountBasePlaybookManager):
else:
return self.secret_generator(secret_type).get_secret()
def get_accounts(self, privilege_account):
def get_accounts(self, privilege_account) -> BaseAccountQuerySet | None:
if not privilege_account:
print(f'not privilege account')
return []
print('Not privilege account')
return
asset = privilege_account.asset
accounts = asset.accounts.all()
@@ -95,34 +94,50 @@ class ChangeSecretManager(AccountBasePlaybookManager):
return host
accounts = self.get_accounts(account)
error_msg = _("No pending accounts found")
if not accounts:
print('没有发现待改密账号: %s 用户ID: %s 类型: %s' % (
asset.name, self.account_ids, self.secret_type
))
print(f'{asset}: {error_msg}')
return []
method_attr = getattr(automation, self.method_type() + '_method')
method_hosts = self.method_hosts_mapper[method_attr]
method_hosts = [h for h in method_hosts if h != host['name']]
inventory_hosts = []
records = []
inventory_hosts = []
if asset.type == HostTypes.WINDOWS and self.secret_type == SecretType.SSH_KEY:
print(f'Windows {asset} does not support ssh key push')
return inventory_hosts
if asset.type == HostTypes.WINDOWS:
accounts = accounts.filter(secret_type=SecretType.PASSWORD)
host['ssh_params'] = {}
for account in accounts:
h = deepcopy(host)
secret_type = account.secret_type
h['name'] += '(' + account.username + ')'
new_secret = self.get_secret(secret_type)
if self.secret_type is None:
new_secret = account.secret
else:
new_secret = self.get_secret(secret_type)
if new_secret is None:
print(f'new_secret is None, account: {account}')
continue
asset_account_id = f'{asset.id}-{account.id}'
if asset_account_id not in self.record_map:
recorder = ChangeSecretRecord(
asset=asset, account=account, execution=self.execution,
old_secret=account.secret, new_secret=new_secret,
comment=f'{account.username}@{asset.address}'
)
records.append(recorder)
else:
record_id = self.record_map[asset_account_id]
try:
recorder = ChangeSecretRecord.objects.get(id=record_id)
except ChangeSecretRecord.DoesNotExist:
print(f"Record {record_id} not found")
continue
recorder = ChangeSecretRecord(
asset=asset, account=account, execution=self.execution,
old_secret=account.secret, new_secret=new_secret,
)
records.append(recorder)
self.name_recorder_mapper[h['name']] = recorder
private_key_path = None
@@ -135,14 +150,13 @@ class ChangeSecretManager(AccountBasePlaybookManager):
'name': account.name,
'username': account.username,
'secret_type': secret_type,
'secret': new_secret,
'private_key_path': private_key_path
'secret': account.escape_jinja2_syntax(new_secret),
'private_key_path': private_key_path,
'become': account.get_ansible_become_auth(),
}
if asset.platform.type == 'oracle':
h['account']['mode'] = 'sysdba' if account.privileged else None
inventory_hosts.append(h)
method_hosts.append(h['name'])
self.method_hosts_mapper[method_attr] = method_hosts
ChangeSecretRecord.objects.bulk_create(records)
return inventory_hosts
@@ -150,27 +164,46 @@ class ChangeSecretManager(AccountBasePlaybookManager):
recorder = self.name_recorder_mapper.get(host)
if not recorder:
return
recorder.status = 'success'
recorder.status = ChangeSecretRecordStatusChoice.success.value
recorder.date_finished = timezone.now()
recorder.save()
account = recorder.account
if not account:
print("Account not found, deleted ?")
return
account.secret = recorder.new_secret
account.save(update_fields=['secret'])
account.date_updated = timezone.now()
max_retries = 3
retry_count = 0
while retry_count < max_retries:
try:
recorder.save()
account.save(update_fields=['secret', 'version', 'date_updated'])
break
except Exception as e:
retry_count += 1
if retry_count == max_retries:
self.on_host_error(host, str(e), result)
else:
print(f'retry {retry_count} times for {host} recorder save error: {e}')
time.sleep(1)
def on_host_error(self, host, error, result):
recorder = self.name_recorder_mapper.get(host)
if not recorder:
return
recorder.status = 'failed'
recorder.status = ChangeSecretRecordStatusChoice.failed.value
recorder.date_finished = timezone.now()
recorder.error = error
recorder.save()
try:
recorder.save()
except Exception as e:
print(f"\033[31m Save {host} recorder error: {e} \033[0m\n")
def on_runner_failed(self, runner, e):
logger.error("Change secret error: ", e)
logger.error("Account error: ", e)
def check_secret(self):
if self.secret_strategy == SecretStrategy.custom \
@@ -179,35 +212,72 @@ class ChangeSecretManager(AccountBasePlaybookManager):
return False
return True
@staticmethod
def get_summary(recorders):
total, succeed, failed = 0, 0, 0
for recorder in recorders:
if recorder.status == ChangeSecretRecordStatusChoice.success.value:
succeed += 1
else:
failed += 1
total += 1
summary = _('Success: %s, Failed: %s, Total: %s') % (succeed, failed, total)
return summary
def run(self, *args, **kwargs):
if not self.check_secret():
if self.secret_type and not self.check_secret():
self.execution.status = 'success'
self.execution.date_finished = timezone.now()
self.execution.save()
return
super().run(*args, **kwargs)
recorders = self.name_recorder_mapper.values()
recorders = list(recorders)
self.send_recorder_mail(recorders)
recorders = list(self.name_recorder_mapper.values())
summary = self.get_summary(recorders)
print(summary, end='')
def send_recorder_mail(self, recorders):
recipients = self.execution.recipients
if not recorders or not recipients:
if self.record_map:
return
recipients = User.objects.filter(id__in=list(recipients.keys()))
failed_recorders = [
r for r in recorders
if r.status == ChangeSecretRecordStatusChoice.failed.value
]
recipients = self.execution.recipients
recipients = User.objects.filter(id__in=list(recipients.keys()))
if not recipients:
return
if failed_recorders:
name = self.execution.snapshot.get('name')
execution_id = str(self.execution.id)
_ids = [r.id for r in failed_recorders]
asset_account_errors = ChangeSecretRecord.objects.filter(
id__in=_ids).values_list('asset__name', 'account__username', 'error')
for user in recipients:
ChangeSecretFailedMsg(name, execution_id, user, asset_account_errors).publish()
if not recorders:
return
self.send_recorder_mail(recipients, recorders, summary)
def send_recorder_mail(self, recipients, recorders, summary):
name = self.execution.snapshot['name']
path = os.path.join(os.path.dirname(settings.BASE_DIR), 'tmp')
filename = os.path.join(path, f'{name}-{local_now_display()}-{time.time()}.xlsx')
filename = os.path.join(path, f'{name}-{local_now_filename()}-{time.time()}.xlsx')
if not self.create_file(recorders, filename):
return
for user in recipients:
attachments = []
if user.secret_key:
password = user.secret_key.encode('utf8')
attachment = os.path.join(path, f'{name}-{local_now_display()}-{time.time()}.zip')
encrypt_and_compress_zip_file(attachment, password, [filename])
attachment = os.path.join(path, f'{name}-{local_now_filename()}-{time.time()}.zip')
encrypt_and_compress_zip_file(attachment, user.secret_key, [filename])
attachments = [attachment]
ChangeSecretExecutionTaskMsg(name, user).publish(attachments)
ChangeSecretExecutionTaskMsg(name, user, summary).publish(attachments)
os.remove(filename)
@staticmethod
@@ -222,8 +292,9 @@ class ChangeSecretManager(AccountBasePlaybookManager):
rows.insert(0, header)
wb = Workbook(filename)
ws = wb.create_sheet('Sheet1')
for row in rows:
ws.append(row)
wb.save(filename)
ws = wb.add_worksheet('Sheet1')
for row_index, row_data in enumerate(rows):
for col_index, col_data in enumerate(row_data):
ws.write_string(row_index, col_index, col_data)
wb.close()
return True

View File

@@ -1,8 +1,9 @@
from .push_account.manager import PushAccountManager
from .change_secret.manager import ChangeSecretManager
from .verify_account.manager import VerifyAccountManager
from .backup_account.manager import AccountBackupManager
from .change_secret.manager import ChangeSecretManager
from .gather_accounts.manager import GatherAccountsManager
from .push_account.manager import PushAccountManager
from .remove_account.manager import RemoveAccountManager
from .verify_account.manager import VerifyAccountManager
from .verify_gateway_account.manager import VerifyGatewayAccountManager
from ..const import AutomationTypes
@@ -12,6 +13,7 @@ class ExecutionManager:
AutomationTypes.push_account: PushAccountManager,
AutomationTypes.change_secret: ChangeSecretManager,
AutomationTypes.verify_account: VerifyAccountManager,
AutomationTypes.remove_account: RemoveAccountManager,
AutomationTypes.gather_accounts: GatherAccountsManager,
AutomationTypes.verify_gateway_account: VerifyGatewayAccountManager,
# TODO 后期迁移到自动化策略中

View File

@@ -1,7 +1,7 @@
- hosts: mongodb
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Get info

View File

@@ -1,7 +1,11 @@
- hosts: mysql
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Get info
@@ -10,10 +14,10 @@
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
filter: users
register: db_info

View File

@@ -1,7 +1,7 @@
- hosts: oralce
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Get info

View File

@@ -1,7 +1,11 @@
- hosts: postgresql
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Get info
@@ -11,6 +15,10 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
login_db: "{{ jms_asset.spec_info.db_name }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
filter: "roles"
register: db_info

View File

@@ -31,7 +31,7 @@ class GatherAccountsFilter:
def posix_filter(info):
username_pattern = re.compile(r'^(\S+)')
ip_pattern = re.compile(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')
login_time_pattern = re.compile(r'\w{3} \d{2} \d{2}:\d{2}:\d{2} \d{4}')
login_time_pattern = re.compile(r'\w{3} \w{3}\s+\d{1,2} \d{2}:\d{2}:\d{2} \d{4}')
result = {}
for line in info:
usernames = username_pattern.findall(line)
@@ -46,7 +46,8 @@ class GatherAccountsFilter:
result[username].update({'address': ip_addr})
login_times = login_time_pattern.findall(line)
if login_times:
date = timezone.datetime.strptime(f'{login_times[0]} +0800', '%b %d %H:%M:%S %Y %z')
datetime_str = login_times[0].split(' ', 1)[1] + " +0800"
date = timezone.datetime.strptime(datetime_str, '%b %d %H:%M:%S %Y %z')
result[username].update({'date': date})
return result

View File

@@ -1,9 +1,10 @@
- hosts: demo
gather_facts: no
tasks:
- name: Gather posix account
- name: Gather windows account
ansible.builtin.win_shell: net user
register: result
ignore_errors: true
- name: Define info by set_fact
ansible.builtin.set_fact:

View File

@@ -1,9 +1,14 @@
from collections import defaultdict
from accounts.const import AutomationTypes
from accounts.models import GatheredAccount
from assets.models import Asset
from common.utils import get_logger
from orgs.utils import tmp_to_org
from users.models import User
from .filter import GatherAccountsFilter
from ..base.manager import AccountBasePlaybookManager
from ...notifications import GatherAccountChangeMsg
logger = get_logger(__name__)
@@ -12,6 +17,9 @@ class GatherAccountsManager(AccountBasePlaybookManager):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.host_asset_mapper = {}
self.asset_account_info = {}
self.asset_username_mapper = defaultdict(set)
self.is_sync_account = self.execution.snapshot.get('is_sync_account')
@classmethod
@@ -26,10 +34,11 @@ class GatherAccountsManager(AccountBasePlaybookManager):
def filter_success_result(self, tp, result):
result = GatherAccountsFilter(tp).run(self.method_id_meta_mapper, result)
return result
@staticmethod
def generate_data(asset, result):
def generate_data(self, asset, result):
data = []
for username, info in result.items():
self.asset_username_mapper[str(asset.id)].add(username)
d = {'asset': asset, 'username': username, 'present': True}
if info.get('date'):
d['date_last_login'] = info['date']
@@ -38,26 +47,93 @@ class GatherAccountsManager(AccountBasePlaybookManager):
data.append(d)
return data
def update_or_create_accounts(self, asset, result):
def collect_asset_account_info(self, asset, result):
data = self.generate_data(asset, result)
with tmp_to_org(asset.org_id):
gathered_accounts = []
GatheredAccount.objects.filter(asset=asset, present=True).update(present=False)
for d in data:
username = d['username']
gathered_account, __ = GatheredAccount.objects.update_or_create(
defaults=d, asset=asset, username=username,
)
gathered_accounts.append(gathered_account)
if not self.is_sync_account:
return
GatheredAccount.sync_accounts(gathered_accounts)
self.asset_account_info[asset] = data
@staticmethod
def get_nested_info(data, *keys):
for key in keys:
data = data.get(key, {})
if not data:
break
return data
def on_host_success(self, host, result):
info = result.get('debug', {}).get('res', {}).get('info', {})
info = self.get_nested_info(result, 'debug', 'res', 'info')
asset = self.host_asset_mapper.get(host)
if asset and info:
result = self.filter_success_result(asset.type, info)
self.update_or_create_accounts(asset, result)
self.collect_asset_account_info(asset, result)
else:
logger.error("Not found info".format(host))
print(f'\033[31m Not found {host} info \033[0m\n')
def update_or_create_accounts(self):
for asset, data in self.asset_account_info.items():
with tmp_to_org(asset.org_id):
gathered_accounts = []
GatheredAccount.objects.filter(asset=asset, present=True).update(present=False)
for d in data:
username = d['username']
gathered_account, __ = GatheredAccount.objects.update_or_create(
defaults=d, asset=asset, username=username,
)
gathered_accounts.append(gathered_account)
if not self.is_sync_account:
continue
GatheredAccount.sync_accounts(gathered_accounts)
def run(self, *args, **kwargs):
super().run(*args, **kwargs)
users, change_info = self.generate_send_users_and_change_info()
self.update_or_create_accounts()
self.send_email_if_need(users, change_info)
def generate_send_users_and_change_info(self):
recipients = self.execution.recipients
if not self.asset_username_mapper or not recipients:
return None, None
users = User.objects.filter(id__in=recipients)
if not users.exists():
return users, None
asset_ids = self.asset_username_mapper.keys()
assets = Asset.objects.filter(id__in=asset_ids).prefetch_related('accounts')
gather_accounts = GatheredAccount.objects.filter(asset_id__in=asset_ids, present=True)
asset_id_map = {str(asset.id): asset for asset in assets}
asset_id_username = list(assets.values_list('id', 'accounts__username'))
asset_id_username.extend(list(gather_accounts.values_list('asset_id', 'username')))
system_asset_username_mapper = defaultdict(set)
for asset_id, username in asset_id_username:
system_asset_username_mapper[str(asset_id)].add(username)
change_info = defaultdict(dict)
for asset_id, usernames in self.asset_username_mapper.items():
system_usernames = system_asset_username_mapper.get(asset_id)
if not system_usernames:
continue
add_usernames = usernames - system_usernames
remove_usernames = system_usernames - usernames
if not add_usernames and not remove_usernames:
continue
change_info[str(asset_id_map[asset_id])] = {
'add_usernames': add_usernames,
'remove_usernames': remove_usernames
}
return users, dict(change_info)
@staticmethod
def send_email_if_need(users, change_info):
if not users or not change_info:
return
for user in users:
GatherAccountChangeMsg(user, change_info).publish_async()

View File

@@ -1,7 +1,7 @@
- hosts: mongodb
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Test MongoDB connection

View File

@@ -1,8 +1,12 @@
- hosts: mysql
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
db_name: "{{ jms_asset.spec_info.db_name }}"
check_ssl: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Test MySQL connection
@@ -11,10 +15,10 @@
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
filter: version
register: db_info
@@ -28,10 +32,10 @@
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
name: "{{ account.username }}"
password: "{{ account.secret }}"
host: "%"
@@ -45,8 +49,8 @@
login_password: "{{ account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
filter: version

View File

@@ -1,7 +1,7 @@
- hosts: oracle
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Test Oracle connection
@@ -39,3 +39,4 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
login_database: "{{ jms_asset.spec_info.db_name }}"
mode: "{{ account.mode }}"

View File

@@ -1,7 +1,11 @@
- hosts: postgre
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Test PostgreSQL connection
@@ -11,6 +15,10 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
login_db: "{{ jms_asset.spec_info.db_name }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
register: result
failed_when: not result.is_available
@@ -28,6 +36,10 @@
db: "{{ jms_asset.spec_info.db_name }}"
name: "{{ account.username }}"
password: "{{ account.secret }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
role_attr_flags: LOGIN
ignore_errors: true
when: result is succeeded
@@ -40,6 +52,10 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
db: "{{ jms_asset.spec_info.db_name }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
when:
- result is succeeded
- change_info is succeeded

View File

@@ -1,7 +1,7 @@
- hosts: sqlserver
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Test SQLServer connection

View File

@@ -14,51 +14,15 @@
- name: "Add {{ account.username }} user"
ansible.builtin.user:
name: "{{ account.username }}"
shell: "{{ params.shell }}"
home: "{{ params.home | default('/home/' + account.username, true) }}"
groups: "{{ params.groups }}"
uid: "{{ params.uid | int if params.uid | length > 0 else omit }}"
shell: "{{ params.shell if params.shell | length > 0 else omit }}"
home: "{{ params.home if params.home | length > 0 else '/home/' + account.username }}"
groups: "{{ params.groups if params.groups | length > 0 else omit }}"
append: yes
expires: -1
state: present
when: user_info.failed
- name: "Add {{ account.username }} group"
ansible.builtin.group:
name: "{{ account.username }}"
state: present
when: user_info.failed
- name: "Add {{ account.username }} user to group"
ansible.builtin.user:
name: "{{ account.username }}"
groups: "{{ params.groups }}"
when:
- user_info.failed
- params.groups
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('des') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ ssh_params.dest }}"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: "Set {{ account.username }} sudo setting"
ansible.builtin.lineinfile:
dest: /etc/sudoers
@@ -67,9 +31,59 @@
line: "{{ account.username + ' ALL=(ALL) NOPASSWD: ' + params.sudo }}"
validate: visudo -cf %s
when:
- user_info.failed
- user_info.failed or params.modify_sudo
- params.sudo
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('des') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: "Get home directory for {{ account.username }}"
ansible.builtin.shell: "getent passwd {{ account.username }} | cut -d: -f6"
register: home_dir
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Check if home directory exists for {{ account.username }}"
ansible.builtin.stat:
path: "{{ home_dir.stdout.strip() }}"
register: home_dir_stat
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Ensure {{ account.username }} home directory exists"
ansible.builtin.file:
path: "{{ home_dir.stdout.strip() }}"
state: directory
owner: "{{ account.username }}"
group: "{{ account.username }}"
mode: '0750'
when:
- account.secret_type == "ssh_key"
- home_dir_stat.stat.exists == false
ignore_errors: yes
- name: Remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ home_dir.stdout.strip() }}/.ssh/authorized_keys"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
ignore_errors: yes
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: Refresh connection
ansible.builtin.meta: reset_connection
@@ -79,12 +93,13 @@
login_password: "{{ account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
become: "{{ account.become.ansible_become | default(False) }}"
become_method: su
become_user: "{{ account.become.ansible_user | default('') }}"
become_password: "{{ account.become.ansible_password | default('') }}"
become_private_key_path: "{{ account.become.ansible_ssh_private_key_file | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "password"
delegate_to: localhost
@@ -94,7 +109,8 @@
login_port: "{{ jms_asset.port }}"
login_user: "{{ account.username }}"
login_private_key_path: "{{ account.private_key_path }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "ssh_key"
delegate_to: localhost

View File

@@ -5,11 +5,17 @@ type:
- AIX
method: push_account
params:
- name: modify_sudo
type: bool
label: "{{ 'Modify sudo label' | trans }}"
default: False
help_text: "{{ 'Modify params sudo help text' | trans }}"
- name: sudo
type: str
label: 'Sudo'
default: '/bin/whoami'
help_text: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
help_text: "{{ 'Params sudo help text' | trans }}"
- name: shell
type: str
@@ -18,19 +24,69 @@ params:
- name: home
type: str
label: '家目录'
label: "{{ 'Params home label' | trans }}"
default: ''
help_text: '默认家目录 /home/系统用户名: /home/username'
help_text: "{{ 'Params home help text' | trans }}"
- name: groups
type: str
label: '用户组'
label: "{{ 'Params groups label' | trans }}"
default: ''
help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
help_text: "{{ 'Params groups help text' | trans }}"
- name: uid
type: str
label: "{{ 'Params uid label' | trans }}"
default: ''
help_text: "{{ 'Params uid help text' | trans }}"
i18n:
Aix account push:
zh: 使用 Ansible 模块 user 执行 Aix 账号推送 (DES)
ja: Ansible user モジュールを使用して Aix アカウントをプッシュする (DES)
en: Using Ansible module user to push account (DES)
zh: '使用 Ansible 模块 user 执行 Aix 账号推送 (DES)'
ja: 'Ansible user モジュールを使用して Aix アカウントをプッシュする (DES)'
en: 'Using Ansible module user to push account (DES)'
Modify params sudo help text:
zh: '如果用户存在可以修改sudo权限'
ja: 'ユーザーが存在する場合、sudo権限を変更できます'
en: 'If the user exists, sudo permissions can be modified'
Params sudo help text:
zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig'
en: 'Use commas to separate multiple commands, such as: /bin/whoami,/sbin/ifconfig'
Params home help text:
zh: '默认家目录 /home/{账号用户名}'
ja: 'デフォルトのホームディレクトリ /home/{アカウントユーザ名}'
en: 'Default home directory /home/{account username}'
Params groups help text:
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
Params uid help text:
zh: '请输入用户ID'
ja: 'ユーザーIDを入力してください'
en: 'Please enter the user ID'
Modify sudo label:
zh: '修改 sudo 权限'
ja: 'sudo 権限を変更'
en: 'Modify sudo'
Params home label:
zh: '家目录'
ja: 'ホームディレクトリ'
en: 'Home'
Params groups label:
zh: '用户组'
ja: 'グループ'
en: 'Groups'
Params uid label:
zh: '用户ID'
ja: 'ユーザーID'
en: 'User ID'

View File

@@ -14,51 +14,15 @@
- name: "Add {{ account.username }} user"
ansible.builtin.user:
name: "{{ account.username }}"
shell: "{{ params.shell }}"
home: "{{ params.home | default('/home/' + account.username, true) }}"
groups: "{{ params.groups }}"
uid: "{{ params.uid | int if params.uid | length > 0 else omit }}"
shell: "{{ params.shell if params.shell | length > 0 else omit }}"
home: "{{ params.home if params.home | length > 0 else '/home/' + account.username }}"
groups: "{{ params.groups if params.groups | length > 0 else omit }}"
append: yes
expires: -1
state: present
when: user_info.failed
- name: "Add {{ account.username }} group"
ansible.builtin.group:
name: "{{ account.username }}"
state: present
when: user_info.failed
- name: "Add {{ account.username }} user to group"
ansible.builtin.user:
name: "{{ account.username }}"
groups: "{{ params.groups }}"
when:
- user_info.failed
- params.groups
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('sha512') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ ssh_params.dest }}"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: "Set {{ account.username }} sudo setting"
ansible.builtin.lineinfile:
dest: /etc/sudoers
@@ -67,9 +31,59 @@
line: "{{ account.username + ' ALL=(ALL) NOPASSWD: ' + params.sudo }}"
validate: visudo -cf %s
when:
- user_info.failed
- user_info.failed or params.modify_sudo
- params.sudo
- name: "Change {{ account.username }} password"
ansible.builtin.user:
name: "{{ account.username }}"
password: "{{ account.secret | password_hash('sha512') }}"
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: "Get home directory for {{ account.username }}"
ansible.builtin.shell: "getent passwd {{ account.username }} | cut -d: -f6"
register: home_dir
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Check if home directory exists for {{ account.username }}"
ansible.builtin.stat:
path: "{{ home_dir.stdout.strip() }}"
register: home_dir_stat
when: account.secret_type == "ssh_key"
ignore_errors: yes
- name: "Ensure {{ account.username }} home directory exists"
ansible.builtin.file:
path: "{{ home_dir.stdout.strip() }}"
state: directory
owner: "{{ account.username }}"
group: "{{ account.username }}"
mode: '0750'
when:
- account.secret_type == "ssh_key"
- home_dir_stat.stat.exists == false
ignore_errors: yes
- name: Remove jumpserver ssh key
ansible.builtin.lineinfile:
dest: "{{ home_dir.stdout.strip() }}/.ssh/authorized_keys"
regexp: "{{ ssh_params.regexp }}"
state: absent
when:
- account.secret_type == "ssh_key"
- ssh_params.strategy == "set_jms"
ignore_errors: yes
- name: "Change {{ account.username }} SSH key"
ansible.builtin.authorized_key:
user: "{{ account.username }}"
key: "{{ account.secret }}"
exclusive: "{{ ssh_params.exclusive }}"
when: account.secret_type == "ssh_key"
- name: Refresh connection
ansible.builtin.meta: reset_connection
@@ -79,12 +93,13 @@
login_password: "{{ account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
become: "{{ account.become.ansible_become | default(False) }}"
become_method: su
become_user: "{{ account.become.ansible_user | default('') }}"
become_password: "{{ account.become.ansible_password | default('') }}"
become_private_key_path: "{{ account.become.ansible_ssh_private_key_file | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "password"
delegate_to: localhost
@@ -94,7 +109,8 @@
login_port: "{{ jms_asset.port }}"
login_user: "{{ account.username }}"
login_private_key_path: "{{ account.private_key_path }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default('') }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
when: account.secret_type == "ssh_key"
delegate_to: localhost

View File

@@ -6,11 +6,17 @@ type:
- linux
method: push_account
params:
- name: modify_sudo
type: bool
label: "{{ 'Modify sudo label' | trans }}"
default: False
help_text: "{{ 'Modify params sudo help text' | trans }}"
- name: sudo
type: str
label: 'Sudo'
default: '/bin/whoami'
help_text: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
help_text: "{{ 'Params sudo help text' | trans }}"
- name: shell
type: str
@@ -20,18 +26,69 @@ params:
- name: home
type: str
label: '家目录'
label: "{{ 'Params home label' | trans }}"
default: ''
help_text: '默认家目录 /home/系统用户名: /home/username'
help_text: "{{ 'Params home help text' | trans }}"
- name: groups
type: str
label: '用户组'
label: "{{ 'Params groups label' | trans }}"
default: ''
help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
help_text: "{{ 'Params groups help text' | trans }}"
- name: uid
type: str
label: "{{ 'Params uid label' | trans }}"
default: ''
help_text: "{{ 'Params uid help text' | trans }}"
i18n:
Posix account push:
zh: 使用 Ansible 模块 user 执行账号推送 (sha512)
ja: Ansible user モジュールを使用してアカウントをプッシュする (sha512)
en: Using Ansible module user to push account (sha512)
zh: '使用 Ansible 模块 user 执行账号推送 (sha512)'
ja: 'Ansible user モジュールを使用してアカウントをプッシュする (sha512)'
en: 'Using Ansible module user to push account (sha512)'
Modify params sudo help text:
zh: '如果用户存在可以修改sudo权限'
ja: 'ユーザーが存在する場合、sudo権限を変更できます'
en: 'If the user exists, sudo permissions can be modified'
Params sudo help text:
zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig'
ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig'
en: 'Use commas to separate multiple commands, such as: /bin/whoami,/sbin/ifconfig'
Params home help text:
zh: '默认家目录 /home/{账号用户名}'
ja: 'デフォルトのホームディレクトリ /home/{アカウントユーザ名}'
en: 'Default home directory /home/{account username}'
Params groups help text:
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'
Params uid help text:
zh: '请输入用户ID'
ja: 'ユーザーIDを入力してください'
en: 'Please enter the user ID'
Modify sudo label:
zh: '修改 sudo 权限'
ja: 'sudo 権限を変更'
en: 'Modify sudo'
Params home label:
zh: '家目录'
ja: 'ホームディレクトリ'
en: 'Home'
Params groups label:
zh: '用户组'
ja: 'グループ'
en: 'Groups'
Params uid label:
zh: '用户ID'
ja: 'ユーザーID'
en: 'User ID'

View File

@@ -10,10 +10,15 @@ params:
type: str
label: '用户组'
default: 'Users,Remote Desktop Users'
help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
help_text: "{{ 'Params groups help text' | trans }}"
i18n:
Windows account push:
zh: 使用 Ansible 模块 win_user 执行 Windows 账号推送
ja: Ansible win_user モジュールを使用して Windows アカウントをプッシュする
en: Using Ansible module win_user to push account
zh: '使用 Ansible 模块 win_user 执行 Windows 账号推送'
ja: 'Ansible win_user モジュールを使用して Windows アカウントをプッシュする'
en: 'Using Ansible module win_user to push account'
Params groups help text:
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'

View File

@@ -0,0 +1,35 @@
- hosts: demo
gather_facts: no
tasks:
- name: Test privileged account
ansible.windows.win_ping:
# - name: Print variables
# debug:
# msg: "Username: {{ account.username }}, Password: {{ account.secret }}"
- name: Push user password
ansible.windows.win_user:
fullname: "{{ account.username}}"
name: "{{ account.username }}"
password: "{{ account.secret }}"
password_never_expires: yes
groups: "{{ params.groups }}"
groups_action: add
update_password: always
ignore_errors: true
when: account.secret_type == "password"
- name: Refresh connection
ansible.builtin.meta: reset_connection
- name: Verify password (pyfreerdp)
rdp_ping:
login_host: "{{ jms_asset.origin_address }}"
login_port: "{{ jms_asset.protocols | selectattr('name', 'equalto', 'rdp') | map(attribute='port') | first }}"
login_user: "{{ account.username }}"
login_password: "{{ account.secret }}"
login_secret_type: "{{ account.secret_type }}"
gateway_args: "{{ jms_gateway | default({}) }}"
when: account.secret_type == "password"
delegate_to: localhost

View File

@@ -0,0 +1,25 @@
id: push_account_windows_rdp_verify
name: "{{ 'Windows account push rdp verify' | trans }}"
version: 1
method: push_account
category: host
type:
- windows
priority: 49
params:
- name: groups
type: str
label: '用户组'
default: 'Users,Remote Desktop Users'
help_text: "{{ 'Params groups help text' | trans }}"
i18n:
Windows account push rdp verify:
zh: '使用 Ansible 模块 win_user 执行 Windows 账号推送(最后使用 Python 模块 pyfreerdp 验证账号的可连接性)'
ja: 'Ansible モジュール win_user を使用して Windows アカウントのプッシュを実行します (最後に Python モジュール pyfreerdp を使用してアカウントの接続性を確認します)'
en: 'Use the Ansible module win_user to perform Windows account push (finally use the Python module pyfreerdp to verify the connectability of the account)'
Params groups help text:
zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)'
ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)'
en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)'

View File

@@ -1,7 +1,4 @@
from copy import deepcopy
from accounts.const import AutomationTypes, SecretType, Connectivity
from assets.const import HostTypes
from accounts.const import AutomationTypes
from common.utils import get_logger
from ..base.manager import AccountBasePlaybookManager
from ..change_secret.manager import ChangeSecretManager
@@ -10,83 +7,11 @@ logger = get_logger(__name__)
class PushAccountManager(ChangeSecretManager, AccountBasePlaybookManager):
ansible_account_prefer = ''
@classmethod
def method_type(cls):
return AutomationTypes.push_account
def host_callback(self, host, asset=None, account=None, automation=None, path_dir=None, **kwargs):
host = super(ChangeSecretManager, self).host_callback(
host, asset=asset, account=account, automation=automation,
path_dir=path_dir, **kwargs
)
if host.get('error'):
return host
accounts = self.get_accounts(account)
inventory_hosts = []
if asset.type == HostTypes.WINDOWS and self.secret_type == SecretType.SSH_KEY:
msg = f'Windows {asset} does not support ssh key push'
print(msg)
return inventory_hosts
host['ssh_params'] = {}
for account in accounts:
h = deepcopy(host)
secret_type = account.secret_type
h['name'] += '(' + account.username + ')'
if self.secret_type is None:
new_secret = account.secret
else:
new_secret = self.get_secret(secret_type)
self.name_recorder_mapper[h['name']] = {
'account': account, 'new_secret': new_secret,
}
private_key_path = None
if secret_type == SecretType.SSH_KEY:
private_key_path = self.generate_private_key_path(new_secret, path_dir)
new_secret = self.generate_public_key(new_secret)
h['ssh_params'].update(self.get_ssh_params(account, new_secret, secret_type))
h['account'] = {
'name': account.name,
'username': account.username,
'secret_type': secret_type,
'secret': new_secret,
'private_key_path': private_key_path
}
if asset.platform.type == 'oracle':
h['account']['mode'] = 'sysdba' if account.privileged else None
inventory_hosts.append(h)
return inventory_hosts
def on_host_success(self, host, result):
account_info = self.name_recorder_mapper.get(host)
if not account_info:
return
account = account_info['account']
new_secret = account_info['new_secret']
if not account:
return
account.secret = new_secret
account.save(update_fields=['secret'])
account.set_connectivity(Connectivity.OK)
def on_host_error(self, host, error, result):
pass
def on_runner_failed(self, runner, e):
logger.error("Pust account error: {}".format(e))
def run(self, *args, **kwargs):
if self.secret_type and not self.check_secret():
return
super(ChangeSecretManager, self).run(*args, **kwargs)
# @classmethod
# def trigger_by_asset_create(cls, asset):
# automations = PushAccountAutomation.objects.filter(

View File

@@ -0,0 +1,21 @@
- hosts: mongodb
gather_facts: no
vars:
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: "Remove account"
mongodb_user:
login_user: "{{ jms_account.username }}"
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
login_database: "{{ jms_asset.spec_info.db_name }}"
ssl: "{{ jms_asset.spec_info.use_ssl }}"
ssl_ca_certs: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_certfile: "{{ jms_asset.secret_info.client_key | default('') }}"
connection_options:
- tlsAllowInvalidHostnames: "{{ jms_asset.spec_info.allow_invalid_cert}}"
db: "{{ jms_asset.spec_info.db_name }}"
name: "{{ account.username }}"
state: absent

View File

@@ -0,0 +1,12 @@
id: remove_account_mongodb
name: "{{ 'MongoDB account remove' | trans }}"
category: database
type:
- mongodb
method: remove_account
i18n:
MongoDB account remove:
zh: 使用 Ansible 模块 mongodb 删除账号
ja: Ansible モジュール mongodb を使用してアカウントを削除する
en: Delete account using Ansible module mongodb

View File

@@ -0,0 +1,22 @@
- hosts: mysql
gather_facts: no
vars:
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: "Remove account"
community.mysql.mysql_user:
login_user: "{{ jms_account.username }}"
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
name: "{{ account.username }}"
state: absent

View File

@@ -0,0 +1,14 @@
id: remove_account_mysql
name: "{{ 'MySQL account remove' | trans }}"
category: database
type:
- mysql
- mariadb
method: remove_account
i18n:
MySQL account remove:
zh: 使用 Ansible 模块 mysql_user 删除账号
ja: Ansible モジュール mysql_user を使用してアカウントを削除します
en: Use the Ansible module mysql_user to delete the account

View File

@@ -0,0 +1,16 @@
- hosts: oracle
gather_facts: no
vars:
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: "Remove account"
oracle_user:
login_user: "{{ jms_account.username }}"
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
login_database: "{{ jms_asset.spec_info.db_name }}"
mode: "{{ jms_account.mode }}"
name: "{{ account.username }}"
state: absent

View File

@@ -0,0 +1,12 @@
id: remove_account_oracle
name: "{{ 'Oracle account remove' | trans }}"
category: database
type:
- oracle
method: remove_account
i18n:
Oracle account remove:
zh: 使用 Python 模块 oracledb 删除账号
ja: Python モジュール oracledb を使用してアカウントを検証する
en: Using Python module oracledb to verify account

View File

@@ -0,0 +1,23 @@
- hosts: postgresql
gather_facts: no
vars:
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: "Remove account"
community.postgresql.postgresql_user:
login_user: "{{ jms_account.username }}"
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
db: "{{ jms_asset.spec_info.db_name }}"
name: "{{ account.username }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
state: absent

View File

@@ -0,0 +1,12 @@
id: remove_account_postgresql
name: "{{ 'PostgreSQL account remove' | trans }}"
category: database
type:
- postgresql
method: remove_account
i18n:
PostgreSQL account remove:
zh: 使用 Ansible 模块 postgresql_user 删除账号
ja: Ansible モジュール postgresql_user を使用してアカウントを削除します
en: Use the Ansible module postgresql_user to delete the account

View File

@@ -0,0 +1,14 @@
- hosts: sqlserver
gather_facts: no
vars:
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: "Remove account"
community.general.mssql_script:
login_user: "{{ jms_account.username }}"
login_password: "{{ jms_account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
name: "{{ jms_asset.spec_info.db_name }}"
script: "DROP USER {{ account.username }}"

View File

@@ -0,0 +1,12 @@
id: remove_account_sqlserver
name: "{{ 'SQLServer account remove' | trans }}"
category: database
type:
- sqlserver
method: remove_account
i18n:
SQLServer account remove:
zh: 使用 Ansible 模块 mssql 删除账号
ja: Ansible モジュール mssql を使用してアカウントを削除する
en: Use Ansible module mssql to delete account

View File

@@ -0,0 +1,28 @@
- hosts: demo
gather_facts: no
tasks:
- name: "Get user home directory path"
ansible.builtin.shell:
cmd: "getent passwd {{ account.username }} | cut -d: -f6"
register: user_home_dir
ignore_errors: yes
- name: "Check if user home directory exists"
ansible.builtin.stat:
path: "{{ user_home_dir.stdout }}"
register: home_dir
when: user_home_dir.stdout != ""
ignore_errors: yes
- name: "Rename user home directory if it exists"
ansible.builtin.command:
cmd: "mv {{ user_home_dir.stdout }} {{ user_home_dir.stdout }}.bak"
when: home_dir.stat | default(false) and user_home_dir.stdout != ""
ignore_errors: yes
- name: "Remove account"
ansible.builtin.user:
name: "{{ account.username }}"
state: absent
remove: "{{ home_dir.stat.exists }}"
when: home_dir.stat | default(false)

View File

@@ -0,0 +1,13 @@
id: remove_account_posix
name: "{{ 'Posix account remove' | trans }}"
category: host
type:
- linux
- unix
method: remove_account
i18n:
Posix account remove:
zh: 使用 Ansible 模块 user 删除账号
ja: Ansible モジュール ユーザーを使用してアカウントを削除します
en: Use the Ansible module user to delete the account

View File

@@ -0,0 +1,7 @@
- hosts: windows
gather_facts: no
tasks:
- name: "Remove account"
ansible.windows.win_user:
name: "{{ account.username }}"
state: absent

View File

@@ -0,0 +1,13 @@
id: remove_account_windows
name: "{{ 'Windows account remove' | trans }}"
version: 1
method: remove_account
category: host
type:
- windows
i18n:
Windows account remove:
zh: 使用 Ansible 模块 win_user 删除账号
ja: Ansible モジュール win_user を使用してアカウントを削除する
en: Use the Ansible module win_user to delete an account

View File

@@ -0,0 +1,70 @@
import os
from copy import deepcopy
from django.db.models import QuerySet
from accounts.const import AutomationTypes
from accounts.models import Account
from common.utils import get_logger
from ..base.manager import AccountBasePlaybookManager
logger = get_logger(__name__)
class RemoveAccountManager(AccountBasePlaybookManager):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.host_account_mapper = {}
def prepare_runtime_dir(self):
path = super().prepare_runtime_dir()
ansible_config_path = os.path.join(path, 'ansible.cfg')
with open(ansible_config_path, 'w') as f:
f.write('[ssh_connection]\n')
f.write('ssh_args = -o ControlMaster=no -o ControlPersist=no\n')
return path
@classmethod
def method_type(cls):
return AutomationTypes.remove_account
def get_gather_accounts(self, privilege_account, gather_accounts: QuerySet):
gather_account_ids = self.execution.snapshot['gather_accounts']
gather_accounts = gather_accounts.filter(id__in=gather_account_ids)
gather_accounts = gather_accounts.exclude(
username__in=[privilege_account.username, 'root', 'Administrator']
)
return gather_accounts
def host_callback(self, host, asset=None, account=None, automation=None, path_dir=None, **kwargs):
if host.get('error'):
return host
gather_accounts = asset.gatheredaccount_set.all()
gather_accounts = self.get_gather_accounts(account, gather_accounts)
inventory_hosts = []
for gather_account in gather_accounts:
h = deepcopy(host)
h['name'] += '(' + gather_account.username + ')'
self.host_account_mapper[h['name']] = (asset, gather_account)
h['account'] = {'username': gather_account.username}
inventory_hosts.append(h)
return inventory_hosts
def on_host_success(self, host, result):
tuple_asset_gather_account = self.host_account_mapper.get(host)
if not tuple_asset_gather_account:
return
asset, gather_account = tuple_asset_gather_account
try:
Account.objects.filter(
asset_id=asset.id,
username=gather_account.username
).delete()
gather_account.delete()
except Exception as e:
print(f'\033[31m Delete account {gather_account.username} failed: {e} \033[0m\n')

View File

@@ -3,13 +3,13 @@
vars:
ansible_shell_type: sh
ansible_connection: local
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Verify account (pyfreerdp)
rdp_ping:
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.protocols | selectattr('name', 'equalto', 'rdp') | map(attribute='port') | first }}"
login_port: "{{ jms_asset.port }}"
login_user: "{{ account.username }}"
login_password: "{{ account.secret }}"
login_secret_type: "{{ account.secret_type }}"
login_private_key_path: "{{ account.private_key_path }}"

View File

@@ -5,9 +5,11 @@ category:
type:
- windows
method: verify_account
protocol: rdp
priority: 1
i18n:
Windows rdp account verify:
zh: 使用 Python 模块 pyfreerdp 验证账号
ja: Python モジュール pyfreerdp を使用してアカウントを検証する
en: Using Python module pyfreerdp to verify account
zh: '使用 Python 模块 pyfreerdp 验证账号'
ja: 'Python モジュール pyfreerdp を使用してアカウントを検証する'
en: 'Using Python module pyfreerdp to verify account'

View File

@@ -2,6 +2,7 @@
gather_facts: no
vars:
ansible_connection: local
ansible_shell_type: sh
ansible_become: false
tasks:
@@ -18,3 +19,5 @@
become_user: "{{ account.become.ansible_user | default('') }}"
become_password: "{{ account.become.ansible_password | default('') }}"
become_private_key_path: "{{ account.become.ansible_ssh_private_key_file | default(None) }}"
old_ssh_version: "{{ jms_asset.old_ssh_version | default(False) }}"
gateway_args: "{{ jms_asset.ansible_ssh_common_args | default(None) }}"

View File

@@ -6,9 +6,11 @@ category:
type:
- all
method: verify_account
protocol: ssh
priority: 50
i18n:
SSH account verify:
zh: 使用 Python 模块 paramiko 验证账号
ja: Python モジュール paramiko を使用してアカウントを検証する
en: Using Python module paramiko to verify account
zh: '使用 Python 模块 paramiko 验证账号'
ja: 'Python モジュール paramiko を使用してアカウントを検証する'
en: 'Using Python module paramiko to verify account'

View File

@@ -1,7 +1,7 @@
- hosts: mongdb
- hosts: mongodb
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Verify account

View File

@@ -1,7 +1,11 @@
- hosts: mysql
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Verify account
@@ -10,8 +14,8 @@
login_password: "{{ account.secret }}"
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
check_hostname: "{{ jms_asset.spec_info.use_ssl and not jms_asset.spec_info.allow_invalid_cert }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default(omit) }}"
client_cert: "{{ jms_asset.secret_info.client_cert | default(omit) }}"
client_key: "{{ jms_asset.secret_info.client_key | default(omit) }}"
check_hostname: "{{ check_ssl if check_ssl else omit }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
client_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
client_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
filter: version

View File

@@ -1,7 +1,7 @@
- hosts: oracle
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Verify account

View File

@@ -1,7 +1,11 @@
- hosts: postgresql
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
check_ssl: "{{ jms_asset.spec_info.use_ssl }}"
ca_cert: "{{ jms_asset.secret_info.ca_cert | default('') }}"
ssl_cert: "{{ jms_asset.secret_info.client_cert | default('') }}"
ssl_key: "{{ jms_asset.secret_info.client_key | default('') }}"
tasks:
- name: Verify account
@@ -11,5 +15,9 @@
login_host: "{{ jms_asset.address }}"
login_port: "{{ jms_asset.port }}"
db: "{{ jms_asset.spec_info.db_name }}"
ca_cert: "{{ ca_cert if check_ssl and ca_cert | length > 0 else omit }}"
ssl_cert: "{{ ssl_cert if check_ssl and ssl_cert | length > 0 else omit }}"
ssl_key: "{{ ssl_key if check_ssl and ssl_key | length > 0 else omit }}"
ssl_mode: "{{ jms_asset.spec_info.pg_ssl_mode }}"
register: result
failed_when: not result.is_available

View File

@@ -1,7 +1,7 @@
- hosts: sqlserver
gather_facts: no
vars:
ansible_python_interpreter: /usr/local/bin/python
ansible_python_interpreter: /opt/py3/bin/python
tasks:
- name: Verify account

View File

@@ -51,6 +51,9 @@ class VerifyAccountManager(AccountBasePlaybookManager):
h['name'] += '(' + account.username + ')'
self.host_account_mapper[h['name']] = account
secret = account.secret
if secret is None:
print(f'account {account.name} secret is None')
continue
private_key_path = None
if account.secret_type == SecretType.SSH_KEY:
@@ -62,7 +65,7 @@ class VerifyAccountManager(AccountBasePlaybookManager):
'name': account.name,
'username': account.username,
'secret_type': account.secret_type,
'secret': secret,
'secret': account.escape_jinja2_syntax(secret),
'private_key_path': private_key_path,
'become': account.get_ansible_become_auth(),
}
@@ -73,8 +76,14 @@ class VerifyAccountManager(AccountBasePlaybookManager):
def on_host_success(self, host, result):
account = self.host_account_mapper.get(host)
account.set_connectivity(Connectivity.OK)
try:
account.set_connectivity(Connectivity.OK)
except Exception as e:
print(f'\033[31m Update account {account.name} connectivity failed: {e} \033[0m\n')
def on_host_error(self, host, error, result):
account = self.host_account_mapper.get(host)
account.set_connectivity(Connectivity.ERR)
try:
account.set_connectivity(Connectivity.ERR)
except Exception as e:
print(f'\033[31m Update account {account.name} connectivity failed: {e} \033[0m\n')

Some files were not shown because too many files have changed in this diff Show More