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
c3f1e0e0
Commit
c3f1e0e0
authored
Nov 27, 2015
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
批量执行命令记录日志 bug fix
parent
b64ab276
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
79 additions
and
8 deletions
+79
-8
connect.py
connect.py
+77
-6
models.py
jlog/models.py
+0
-1
root.png
static/img/root.png
+0
-0
log_online.html
templates/jlog/log_online.html
+2
-1
No files found.
connect.py
View file @
c3f1e0e0
...
@@ -45,11 +45,12 @@ def color_print(msg, color='red', exits=False):
...
@@ -45,11 +45,12 @@ def color_print(msg, color='red', exits=False):
color_msg
=
{
'blue'
:
'
\033
[1;36m
%
s
\033
[0m'
,
color_msg
=
{
'blue'
:
'
\033
[1;36m
%
s
\033
[0m'
,
'green'
:
'
\033
[1;32m
%
s
\033
[0m'
,
'green'
:
'
\033
[1;32m
%
s
\033
[0m'
,
'red'
:
'
\033
[1;31m
%
s
\033
[0m'
}
'red'
:
'
\033
[1;31m
%
s
\033
[0m'
}
msg
=
color_msg
.
get
(
color
,
'blue'
)
%
msg
print
color_msg
.
get
(
color
,
'blue'
)
%
msg
print
msg
if
exits
:
if
exits
:
time
.
sleep
(
2
)
time
.
sleep
(
2
)
sys
.
exit
()
sys
.
exit
()
return
msg
class
Tty
(
object
):
class
Tty
(
object
):
...
@@ -527,6 +528,35 @@ class Nav(object):
...
@@ -527,6 +528,35 @@ class Nav(object):
print
'[
%-3
s]
%-15
s'
%
(
asset_group
.
id
,
asset_group
.
name
)
print
'[
%-3
s]
%-15
s'
%
(
asset_group
.
id
,
asset_group
.
name
)
print
print
def
get_exec_log
(
self
,
assets_name_str
):
exec_log_dir
=
os
.
path
.
join
(
LOG_DIR
,
'exec'
)
date_today
=
datetime
.
datetime
.
now
()
date_start
=
date_today
.
strftime
(
'
%
Y
%
m
%
d'
)
time_start
=
date_today
.
strftime
(
'
%
H
%
M
%
S'
)
today_connect_log_dir
=
os
.
path
.
join
(
exec_log_dir
,
date_start
)
log_file_path
=
os
.
path
.
join
(
today_connect_log_dir
,
'
%
s_
%
s'
%
(
self
.
user
.
username
,
time_start
))
try
:
mkdir
(
os
.
path
.
dirname
(
today_connect_log_dir
),
mode
=
0777
)
mkdir
(
today_connect_log_dir
,
mode
=
0777
)
except
OSError
:
logger
.
debug
(
'创建目录
%
s 失败,请修改
%
s目录权限'
%
(
today_connect_log_dir
,
exec_log_dir
))
raise
ServerError
(
'Create
%
s failed, Please modify
%
s permission.'
%
(
today_connect_log_dir
,
exec_log_dir
))
try
:
log_file_f
=
open
(
log_file_path
+
'.log'
,
'a'
)
log_file_f
.
write
(
'Start at
%
s
\r\n
'
%
datetime
.
datetime
.
now
())
log_time_f
=
open
(
log_file_path
+
'.time'
,
'a'
)
except
IOError
:
logger
.
debug
(
'创建tty日志文件失败, 请修改目录
%
s权限'
%
today_connect_log_dir
)
raise
ServerError
(
'Create logfile failed, Please modify
%
s permission.'
%
today_connect_log_dir
)
remote_ip
=
os
.
popen
(
"who -m | awk '{ print $5 }'"
)
.
read
()
.
strip
(
'()
\n
'
)
log
=
Log
(
user
=
self
.
user
.
username
,
host
=
assets_name_str
,
remote_ip
=
remote_ip
,
login_type
=
'exec'
,
log_path
=
log_file_path
,
start_time
=
datetime
.
datetime
.
now
(),
pid
=
os
.
getpid
())
log
.
save
()
return
log_file_f
,
log_time_f
,
log
def
exec_cmd
(
self
):
def
exec_cmd
(
self
):
"""
"""
批量执行命令
批量执行命令
...
@@ -553,7 +583,6 @@ class Nav(object):
...
@@ -553,7 +583,6 @@ class Nav(object):
print
"该角色有权限的所有主机"
print
"该角色有权限的所有主机"
for
asset
in
assets
:
for
asset
in
assets
:
print
asset
.
hostname
print
asset
.
hostname
print
print
print
"请输入主机名、IP或ansile支持的pattern, q退出"
print
"请输入主机名、IP或ansile支持的pattern, q退出"
pattern
=
raw_input
(
"
\033
[1;32mPattern>:
\033
[0m "
)
.
strip
()
pattern
=
raw_input
(
"
\033
[1;32mPattern>:
\033
[0m "
)
.
strip
()
...
@@ -563,25 +592,64 @@ class Nav(object):
...
@@ -563,25 +592,64 @@ class Nav(object):
res
=
gen_resource
({
'user'
:
self
.
user
,
'asset'
:
assets
,
'role'
:
role
},
perm
=
self
.
user_perm
)
res
=
gen_resource
({
'user'
:
self
.
user
,
'asset'
:
assets
,
'role'
:
role
},
perm
=
self
.
user_perm
)
cmd
=
Command
(
res
)
cmd
=
Command
(
res
)
logger
.
debug
(
"res:
%
s"
%
res
)
logger
.
debug
(
"res:
%
s"
%
res
)
asset_name_str
=
''
for
inv
in
cmd
.
inventory
.
get_hosts
(
pattern
=
pattern
):
for
inv
in
cmd
.
inventory
.
get_hosts
(
pattern
=
pattern
):
print
inv
.
name
print
inv
.
name
asset_name_str
+=
inv
.
name
print
print
log_file_f
,
log_time_f
,
log
=
self
.
get_exec_log
(
asset_name_str
)
pre_timestamp
=
time
.
time
()
while
True
:
while
True
:
print
"请输入执行的命令, 按q退出"
print
"请输入执行的命令, 按q退出"
data
=
'ansible> '
log_file_f
.
write
(
data
)
log_file_f
.
flush
()
now_timestamp
=
time
.
time
()
log_time_f
.
write
(
'
%
s
%
s
\n
'
%
(
round
(
now_timestamp
-
pre_timestamp
,
4
),
len
(
data
)))
log_time_f
.
flush
()
pre_timestamp
=
now_timestamp
command
=
raw_input
(
"
\033
[1;32mCmds>:
\033
[0m "
)
.
strip
()
command
=
raw_input
(
"
\033
[1;32mCmds>:
\033
[0m "
)
.
strip
()
data
=
'
%
s
\r\n
'
%
command
log_file_f
.
write
(
data
)
log_file_f
.
flush
()
now_timestamp
=
time
.
time
()
log_time_f
.
write
(
'
%
s
%
s
\n
'
%
(
round
(
now_timestamp
-
pre_timestamp
,
4
),
len
(
data
)))
log_time_f
.
flush
()
pre_timestamp
=
now_timestamp
TtyLog
(
log
=
log
,
cmd
=
command
,
datetime
=
datetime
.
datetime
.
now
())
.
save
()
if
command
==
'q'
:
if
command
==
'q'
:
log
.
is_finished
=
True
log
.
end_time
=
datetime
.
datetime
.
now
()
log
.
save
()
break
break
result
=
cmd
.
run
(
module_name
=
'shell'
,
command
=
command
,
pattern
=
pattern
)
result
=
cmd
.
run
(
module_name
=
'shell'
,
command
=
command
,
pattern
=
pattern
)
for
k
,
v
in
result
.
items
():
for
k
,
v
in
result
.
items
():
if
k
==
'ok'
:
if
k
==
'ok'
:
for
host
,
output
in
v
.
items
():
for
host
,
output
in
v
.
items
():
color_print
(
"
%
s =>
%
s"
%
(
host
,
'Ok'
),
'green'
)
header
=
color_print
(
"
%
s =>
%
s"
%
(
host
,
'Ok'
),
'green'
)
print
output
print
output
output
=
re
.
sub
(
r'[\r\n]'
,
'
\r\n
'
,
output
)
data
=
'
%
s
\r\n
%
s
\r\n
'
%
(
header
,
output
)
now_timestamp
=
time
.
time
()
log_file_f
.
write
(
data
)
log_file_f
.
flush
()
log_time_f
.
write
(
'
%
s
%
s
\n
'
%
(
round
(
now_timestamp
-
pre_timestamp
,
4
),
len
(
data
)))
log_time_f
.
flush
()
pre_timestamp
=
now_timestamp
print
print
else
:
else
:
for
host
,
output
in
v
.
items
():
for
host
,
output
in
v
.
items
():
color_print
(
"
%
s =>
%
s"
%
(
host
,
k
),
'red'
)
header
=
color_print
(
"
%
s =>
%
s"
%
(
host
,
k
),
'red'
)
color_print
(
output
,
'red'
)
output
=
color_print
(
output
,
'red'
)
output
=
re
.
sub
(
r'[\r\n]'
,
'
\r\n
'
,
output
)
data
=
'
%
s
\r\n
%
s
\r\n
'
%
(
header
,
output
)
now_timestamp
=
time
.
time
()
log_file_f
.
write
(
data
)
log_file_f
.
flush
()
log_time_f
.
write
(
'
%
s
%
s
\n
'
%
(
round
(
now_timestamp
-
pre_timestamp
,
4
),
len
(
data
)))
log_time_f
.
flush
()
pre_timestamp
=
now_timestamp
print
print
print
"="
*
20
print
"="
*
20
print
print
...
@@ -593,6 +661,9 @@ class Nav(object):
...
@@ -593,6 +661,9 @@ class Nav(object):
except
EOFError
:
except
EOFError
:
print
print
break
break
finally
:
log
.
is_finished
=
True
log
.
end_time
=
datetime
.
datetime
.
now
()
def
main
():
def
main
():
...
...
jlog/models.py
View file @
c3f1e0e0
...
@@ -26,4 +26,3 @@ class TtyLog(models.Model):
...
@@ -26,4 +26,3 @@ class TtyLog(models.Model):
log
=
models
.
ForeignKey
(
Log
)
log
=
models
.
ForeignKey
(
Log
)
datetime
=
models
.
DateTimeField
()
datetime
=
models
.
DateTimeField
()
cmd
=
models
.
CharField
(
max_length
=
200
)
cmd
=
models
.
CharField
(
max_length
=
200
)
static/img/root.png
View replaced file @
b64ab276
View file @
c3f1e0e0
105 KB
|
W:
|
H:
106 KB
|
W:
|
H:
2-up
Swipe
Onion skin
templates/jlog/log_online.html
View file @
c3f1e0e0
...
@@ -76,6 +76,7 @@
...
@@ -76,6 +76,7 @@
<table
class=
"table table-striped table-bordered table-hover "
>
<table
class=
"table table-striped table-bordered table-hover "
>
<thead>
<thead>
<tr>
<tr>
<th
class=
"text-center"
>
ID
</th>
<th
class=
"text-center"
>
用户名
</th>
<th
class=
"text-center"
>
用户名
</th>
<th
class=
"text-center"
>
登录主机
</th>
<th
class=
"text-center"
>
登录主机
</th>
<th
class=
"text-center"
>
来源IP
</th>
<th
class=
"text-center"
>
来源IP
</th>
...
@@ -84,12 +85,12 @@
...
@@ -84,12 +85,12 @@
<th
class=
"text-center"
>
实时监控
</th>
<th
class=
"text-center"
>
实时监控
</th>
<th
class=
"text-center"
>
阻断
</th>
<th
class=
"text-center"
>
阻断
</th>
<th
class=
"text-center"
>
登录时间
</th>
<th
class=
"text-center"
>
登录时间
</th>
</tr>
</tr>
</thead>
</thead>
<tbody>
<tbody>
{% for post in contacts.object_list %}
{% for post in contacts.object_list %}
<tr
class=
"gradeX"
>
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ post.id }}
</td>
<td
id=
"username"
class=
"text-center"
>
{{ post.user }}
</td>
<td
id=
"username"
class=
"text-center"
>
{{ post.user }}
</td>
<td
id=
"ip"
class=
"text-center"
>
{{ post.host }}
</td>
<td
id=
"ip"
class=
"text-center"
>
{{ post.host }}
</td>
<td
id=
"remote_ip"
class=
"text-center"
>
{{ post.remote_ip }}
</td>
<td
id=
"remote_ip"
class=
"text-center"
>
{{ post.remote_ip }}
</td>
...
...
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