Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
4959073a
Commit
4959073a
authored
9 years ago
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
web 批量执行命令
parent
88fbcabc
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
47 additions
and
25 deletions
+47
-25
urls.py
jlog/urls.py
+2
-1
views.py
jlog/views.py
+0
-10
perm_api.py
jperm/perm_api.py
+15
-0
urls.py
jperm/urls.py
+1
-0
views.py
jumpserver/views.py
+2
-2
run_websocket.py
run_websocket.py
+3
-2
exec_cmd.html
templates/exec_cmd.html
+4
-4
asset_list.html
templates/jasset/asset_list.html
+20
-6
No files found.
jlog/urls.py
View file @
4959073a
...
...
@@ -9,5 +9,5 @@ urlpatterns = patterns('',
url
(
r'^log_kill/'
,
log_kill
),
url
(
r'^record/$'
,
log_record
),
url
(
r'^web_terminal/$'
,
web_terminal
),
url
(
r'^get_role_name/$'
,
get_role_name
),
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
jlog/views.py
View file @
4959073a
...
...
@@ -107,16 +107,6 @@ def log_record(request):
return
HttpResponse
(
'无日志记录!'
)
@require_role
(
'user'
)
def
get_role_name
(
request
):
asset_id
=
request
.
GET
.
get
(
'id'
,
9999
)
asset
=
get_object
(
Asset
,
id
=
asset_id
)
if
asset
:
role
=
user_have_perm
(
request
.
user
,
asset
=
asset
)
return
HttpResponse
(
','
.
join
([
i
.
name
for
i
in
role
]))
return
HttpResponse
(
'error'
)
@require_role
(
'user'
)
def
web_terminal
(
request
):
asset_id
=
request
.
GET
.
get
(
'id'
)
...
...
This diff is collapsed.
Click to expand it.
jperm/perm_api.py
View file @
4959073a
...
...
@@ -300,6 +300,21 @@ def get_role_push_host(role):
asset_no_push
=
set
(
asset_all
)
-
set
(
asset_pushed
.
keys
())
return
asset_pushed
,
asset_no_push
@require_role
(
'user'
)
def
perm_role_get
(
request
):
asset_id
=
request
.
GET
.
get
(
'id'
,
0
)
if
asset_id
:
asset
=
get_object
(
Asset
,
id
=
asset_id
)
if
asset
:
role
=
user_have_perm
(
request
.
user
,
asset
=
asset
)
return
HttpResponse
(
','
.
join
([
i
.
name
for
i
in
role
]))
else
:
roles
=
get_group_user_perm
(
request
.
user
)
.
get
(
'role'
)
.
keys
()
return
HttpResponse
(
','
.
join
(
i
.
name
for
i
in
roles
))
return
HttpResponse
(
'error'
)
if
__name__
==
"__main__"
:
print
get_role_info
(
1
)
...
...
This diff is collapsed.
Click to expand it.
jperm/urls.py
View file @
4959073a
...
...
@@ -14,6 +14,7 @@ urlpatterns = patterns('jperm.views',
(
r'^role/perm_role_edit/$'
,
perm_role_edit
),
(
r'^role/push/$'
,
perm_role_push
),
(
r'^role/recycle/$'
,
perm_role_recycle
),
(
r'^role/get/$'
,
perm_role_get
),
(
r'^sudo/$'
,
perm_sudo_list
),
(
r'^sudo/perm_sudo_add/$'
,
perm_sudo_add
),
(
r'^sudo/perm_sudo_delete/$'
,
perm_sudo_delete
),
...
...
This diff is collapsed.
Click to expand it.
jumpserver/views.py
View file @
4959073a
...
...
@@ -362,6 +362,6 @@ def download(request):
@login_required
(
login_url
=
'/login'
)
def
exec_cmd
(
request
):
role
_name
=
request
.
GET
.
get
(
'role_nam
e'
)
web_terminal_uri
=
'ws://
%
s/exec?role=
%
s'
%
(
WEB_SOCKET_HOST
,
role
_name
)
role
=
request
.
GET
.
get
(
'rol
e'
)
web_terminal_uri
=
'ws://
%
s/exec?role=
%
s'
%
(
WEB_SOCKET_HOST
,
role
)
return
my_render
(
'exec_cmd.html'
,
locals
(),
request
)
This diff is collapsed.
Click to expand it.
run_websocket.py
View file @
4959073a
...
...
@@ -229,7 +229,8 @@ class ExecHandler(tornado.websocket.WebSocketHandler):
@require_auth
(
'user'
)
def
open
(
self
):
logger
.
debug
(
'Websocket: Open exec request'
)
role_name
=
self
.
get_argument
(
'role'
,
'dev'
)
role_name
=
self
.
get_argument
(
'role'
,
'sb'
)
logger
.
debug
(
'Web执行命令: 请求角色
%
s'
%
role_name
)
self
.
role
=
get_object
(
PermRole
,
name
=
role_name
)
self
.
perm
=
get_group_user_perm
(
self
.
user
)
roles
=
self
.
perm
.
get
(
'role'
)
.
keys
()
...
...
@@ -262,7 +263,7 @@ class ExecHandler(tornado.websocket.WebSocketHandler):
header
=
"<span style='color: red'>[
%
s =>
%
s]</span>
\n
"
%
(
host
,
'failed'
)
self
.
write_message
(
header
)
self
.
write_message
(
output
)
self
.
write_message
(
'
\n\n
'
)
self
.
write_message
(
'
\n
~o~ Task finished ~o~
\n
'
)
class
WebTerminalHandler
(
tornado
.
websocket
.
WebSocketHandler
):
...
...
This diff is collapsed.
Click to expand it.
templates/exec_cmd.html
View file @
4959073a
...
...
@@ -23,7 +23,7 @@
<script
type=
"text/javascript"
>
var
wsUri
=
"{{ web_terminal_uri }}"
+
"&role=dev"
;
var
wsUri
=
"{{ web_terminal_uri }}"
;
//请求的websocket url
var
ws
=
new
WebSocket
(
wsUri
);
function
createSystemMessage
(
message
)
{
...
...
@@ -92,7 +92,7 @@
{#
background-color
:
#ecf0f1
;
#
}
{
#
border
:
#000
solid
5px
;
#
}
background
:
#000
;
width
:
6
00px
;
width
:
8
00px
;
box-shadow
:
rgba
(
0
,
0
,
0
,
0
.8
)
2px
2px
20px
;
color
:
#fff
;
}
...
...
@@ -109,7 +109,7 @@
position
:
fixed
;
bottom
:
0
;
height
:
50px
;
width
:
6
00px
;
width
:
8
00px
;
{#
border
:
#000
solid
-10px
;
#
}
background-color
:
#2980b9
;
}
...
...
@@ -130,7 +130,7 @@
}
.content
{
width
:
6
00px
;
width
:
8
00px
;
margin-left
:
5px
;
}
...
...
This diff is collapsed.
Click to expand it.
templates/jasset/asset_list.html
View file @
4959073a
...
...
@@ -177,8 +177,8 @@
});
$
(
'#exec_cmd'
).
click
(
function
(){
var
url
=
'/jlog/get_role_name/?id={{ user.id }}
'
;
var
href
=
$
(
this
).
attr
(
'href'
)
;
var
url
=
'/jperm/role/get/
'
;
var
new_url
=
'/exec_cmd/?role='
;
$
.
ajax
({
type
:
'GET'
,
url
:
url
,
...
...
@@ -192,7 +192,7 @@
title
:
title
,
maxmin
:
true
,
shade
:
false
,
area
:
[
'
628px'
,
'452
px'
],
area
:
[
'
800px'
,
'700
px'
],
content
:
new_url
+
data
});
//window.open(new_url + data, '', 'location=no, resizeable=no, height=410, width=625, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,status=no');
...
...
@@ -201,7 +201,7 @@
}
else
{
aUrl
=
''
;
$
.
each
(
dataArray
,
function
(
index
,
value
){
aUrl
+=
'<a onclick="windowOpen
(this); return false" class="btn btn-xs btn-primary newa" href='
+
new_url
+
value
+
' value='
+
hostname
+
'>'
+
value
+
'</a> '
aUrl
+=
'<a onclick="windowOpen
Exec(this); return false" class="btn btn-xs btn-primary newa" href='
+
new_url
+
value
+
'>'
+
value
+
'</a> '
});
layer
.
alert
(
aUrl
,
{
skin
:
'layui-layer-molv'
,
...
...
@@ -217,7 +217,7 @@
});
$
(
'.conn'
).
click
(
function
(){
var
url
=
'/j
log/get_role_name
/?id='
+
$
(
this
).
attr
(
'value'
);
var
url
=
'/j
perm/role/get
/?id='
+
$
(
this
).
attr
(
'value'
);
var
href
=
$
(
this
).
attr
(
'href'
);
var
new_url
=
'/jlog/web_terminal/?id='
+
$
(
this
).
attr
(
'value'
)
+
'&role='
;
var
hostname
=
$
(
this
).
closest
(
'tr'
).
find
(
'.hostname'
)[
0
].
innerHTML
;
...
...
@@ -270,7 +270,21 @@
shade
:
false
,
content
:
new_url
});
//window.open(new_url, '', 'height=410, width=625, top=89px, left=99px,toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');
return
false
}
function
windowOpenExec
(
a
){
var
new_url
=
$
(
a
).
attr
(
'href'
);
var
title
=
'Jumpserver Exec Terminal'
;
layer
.
open
({
type
:
2
,
title
:
title
,
maxmin
:
true
,
area
:
[
'800px'
,
'700px'
],
shade
:
false
,
content
:
new_url
});
console
.
log
(
new_url
);
return
false
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment