mirror of https://github.com/jumpserver/jumpserver
fix passwd input
parent
987b1c2c36
commit
dff50305de
45
connect.py
45
connect.py
|
@ -93,9 +93,7 @@ class Tty(object):
|
||||||
self.remote_ip = ''
|
self.remote_ip = ''
|
||||||
self.login_type = login_type
|
self.login_type = login_type
|
||||||
self.vim_flag = False
|
self.vim_flag = False
|
||||||
self.vim_end_flag = False
|
|
||||||
self.vim_end_pattern = re.compile(r'\x1b\[\?1049', re.X)
|
self.vim_end_pattern = re.compile(r'\x1b\[\?1049', re.X)
|
||||||
self.vim_pattern = re.compile(r'\W?vi[m]?\s.* | \W?fg\s.*', re.X)
|
|
||||||
self.vim_data = ''
|
self.vim_data = ''
|
||||||
self.stream = None
|
self.stream = None
|
||||||
self.screen = None
|
self.screen = None
|
||||||
|
@ -117,7 +115,8 @@ class Tty(object):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def command_parser(self, command):
|
@staticmethod
|
||||||
|
def command_parser(command):
|
||||||
"""
|
"""
|
||||||
处理命令中如果有ps1或者mysql的特殊情况,极端情况下会有ps1和mysql
|
处理命令中如果有ps1或者mysql的特殊情况,极端情况下会有ps1和mysql
|
||||||
:param command:要处理的字符传
|
:param command:要处理的字符传
|
||||||
|
@ -157,14 +156,10 @@ class Tty(object):
|
||||||
else:
|
else:
|
||||||
command = line_data
|
command = line_data
|
||||||
break
|
break
|
||||||
if command != '':
|
|
||||||
# 判断用户输入的是否是vim 或者fg命令
|
|
||||||
if self.vim_pattern.search(command):
|
|
||||||
self.vim_flag = True
|
|
||||||
# 虚拟屏幕清空
|
|
||||||
self.screen.reset()
|
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
# 虚拟屏幕清空
|
||||||
|
self.screen.reset()
|
||||||
return command
|
return command
|
||||||
|
|
||||||
def get_log(self):
|
def get_log(self):
|
||||||
|
@ -345,9 +340,8 @@ class SshTty(Tty):
|
||||||
pre_timestamp = now_timestamp
|
pre_timestamp = now_timestamp
|
||||||
log_file_f.flush()
|
log_file_f.flush()
|
||||||
|
|
||||||
if self.vim_flag:
|
self.vim_data += x
|
||||||
self.vim_data += x
|
if input_mode:
|
||||||
elif input_mode:
|
|
||||||
data += x
|
data += x
|
||||||
|
|
||||||
except socket.timeout:
|
except socket.timeout:
|
||||||
|
@ -361,21 +355,20 @@ class SshTty(Tty):
|
||||||
termlog.recoder = True
|
termlog.recoder = True
|
||||||
input_mode = True
|
input_mode = True
|
||||||
if self.is_output(str(x)):
|
if self.is_output(str(x)):
|
||||||
if self.vim_flag:
|
# 如果len(str(x)) > 1 说明是复制输入的
|
||||||
match = self.vim_end_pattern.findall(self.vim_data)
|
if len(str(x)) > 1:
|
||||||
if match:
|
data = x
|
||||||
if self.vim_end_flag or len(match) == 2:
|
match = self.vim_end_pattern.findall(self.vim_data)
|
||||||
self.vim_flag = False
|
if match:
|
||||||
self.vim_end_flag = False
|
if self.vim_flag or len(match) == 2:
|
||||||
else:
|
self.vim_flag = False
|
||||||
self.vim_end_flag = True
|
else:
|
||||||
else:
|
self.vim_flag = True
|
||||||
# 如果len(str(x)) > 1 说明是复制输入的
|
elif not self.vim_flag:
|
||||||
if len(str(x)) > 1:
|
self.vim_flag = False
|
||||||
data = x
|
|
||||||
data = self.deal_command(data)[0:200]
|
data = self.deal_command(data)[0:200]
|
||||||
if len(data) > 0:
|
if data is not None:
|
||||||
TtyLog(log=log, datetime=datetime.datetime.now(), cmd=data).save()
|
TtyLog(log=log, datetime=datetime.datetime.now(), cmd=result).save()
|
||||||
data = ''
|
data = ''
|
||||||
self.vim_data = ''
|
self.vim_data = ''
|
||||||
input_mode = False
|
input_mode = False
|
||||||
|
|
Loading…
Reference in New Issue