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
598d6cff
Commit
598d6cff
authored
Mar 18, 2016
by
kelianchun_miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pull issue #120
parent
d76865c1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
7 deletions
+16
-7
connect.py
connect.py
+16
-7
No files found.
connect.py
View file @
598d6cff
...
...
@@ -95,8 +95,18 @@ class Tty(object):
self
.
ps1_pattern
=
re
.
compile
(
'
\
[.*@.*
\
][
\
$#]
\
s'
)
self
.
vim_pattern
=
re
.
compile
(
r'\Wvi[m]+\s.* | \Wfg\s.*'
,
re
.
X
)
self
.
vim_data
=
''
self
.
stream
=
pyte
.
ByteStream
()
self
.
stream
=
None
self
.
screen
=
None
self
.
__init_screen_stream
()
def
__init_screen_stream
(
self
):
"""
初始化虚拟屏幕和字符流
:return:
"""
self
.
stream
=
pyte
.
ByteStream
()
self
.
screen
=
pyte
.
Screen
(
80
,
24
)
self
.
stream
.
attach
(
self
.
screen
)
@staticmethod
def
is_output
(
strings
):
...
...
@@ -125,12 +135,14 @@ class Tty(object):
result
=
match
[
-
1
]
.
strip
()
return
result
def
deal_command
(
self
):
def
deal_command
(
self
,
data
):
"""
处理截获的命令
:param data: 要处理的命令
:return:返回最后的处理结果
"""
command
=
''
self
.
stream
.
feed
(
data
)
# 从虚拟屏幕中获取处理后的数据
for
line
in
reversed
(
self
.
screen
.
buffer
):
line_data
=
""
.
join
(
map
(
operator
.
attrgetter
(
"data"
),
line
))
.
strip
()
...
...
@@ -348,16 +360,15 @@ class SshTty(Tty):
# 这个是用来处理用户的复制操作
if
input_str
!=
x
:
data
+=
input_str
self
.
stream
.
feed
(
data
)
if
self
.
vim_flag
:
match
=
self
.
ps1_pattern
.
search
(
self
.
vim_data
)
if
match
:
self
.
vim_flag
=
False
data
=
self
.
deal_command
()[
0
:
200
]
data
=
self
.
deal_command
(
data
)[
0
:
200
]
if
len
(
data
)
>
0
:
TtyLog
(
log
=
log
,
datetime
=
datetime
.
datetime
.
now
(),
cmd
=
data
)
.
save
()
else
:
data
=
self
.
deal_command
()[
0
:
200
]
data
=
self
.
deal_command
(
data
)[
0
:
200
]
if
len
(
data
)
>
0
:
TtyLog
(
log
=
log
,
datetime
=
datetime
.
datetime
.
now
(),
cmd
=
data
)
.
save
()
data
=
''
...
...
@@ -395,8 +406,6 @@ class SshTty(Tty):
win_size
=
self
.
get_win_size
()
#self.channel = channel = ssh.invoke_shell(height=win_size[0], width=win_size[1], term='xterm')
self
.
channel
=
channel
=
transport
.
open_session
()
self
.
screen
=
pyte
.
Screen
(
win_size
[
1
],
win_size
[
0
])
self
.
stream
.
attach
(
self
.
screen
)
channel
.
get_pty
(
term
=
'xterm'
,
height
=
win_size
[
0
],
width
=
win_size
[
1
])
channel
.
invoke_shell
()
try
:
...
...
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