mirror of https://github.com/jumpserver/jumpserver
恢复错误修复
parent
6f4fd18c47
commit
33663783cc
25
connect.py
25
connect.py
|
@ -31,6 +31,7 @@ from jperm.ansible_api import Command, MyRunner
|
||||||
from jlog.models import ExecLog
|
from jlog.models import ExecLog
|
||||||
|
|
||||||
login_user = get_object(User, username=getpass.getuser())
|
login_user = get_object(User, username=getpass.getuser())
|
||||||
|
remote_ip = os.popen("who -m | awk '{ print $5 }'").read().strip('()\n')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import termios
|
import termios
|
||||||
|
@ -228,8 +229,6 @@ class Tty(object):
|
||||||
raise ServerError('Create %s failed, Please modify %s permission.' % (today_connect_log_dir, tty_log_dir))
|
raise ServerError('Create %s failed, Please modify %s permission.' % (today_connect_log_dir, tty_log_dir))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# log_file_f = copen(log_file_path + '.log', mode='at', encoding='utf-8', errors='replace')
|
|
||||||
# log_time_f = copen(log_file_path + '.time', mode='at', encoding='utf-8', errors='replace')
|
|
||||||
log_file_f = open(log_file_path + '.log', 'a')
|
log_file_f = open(log_file_path + '.log', 'a')
|
||||||
log_time_f = open(log_file_path + '.time', 'a')
|
log_time_f = open(log_file_path + '.time', 'a')
|
||||||
except IOError:
|
except IOError:
|
||||||
|
@ -238,13 +237,12 @@ class Tty(object):
|
||||||
|
|
||||||
if self.login_type == 'ssh': # 如果是ssh连接过来,记录connect.py的pid,web terminal记录为日志的id
|
if self.login_type == 'ssh': # 如果是ssh连接过来,记录connect.py的pid,web terminal记录为日志的id
|
||||||
pid = os.getpid()
|
pid = os.getpid()
|
||||||
self.remote_ip = os.popen("who -m | awk '{ print $5 }'").read().strip('()\n') # 获取远端IP
|
self.remote_ip = remote_ip # 获取远端IP
|
||||||
else:
|
else:
|
||||||
pid = 0
|
pid = 0
|
||||||
|
|
||||||
log = Log(user=self.username, host=self.asset_name, remote_ip=self.remote_ip, login_type=self.login_type,
|
log = Log(user=self.username, host=self.asset_name, remote_ip=self.remote_ip, login_type=self.login_type,
|
||||||
log_path=log_file_path, start_time=date_today, pid=pid)
|
log_path=log_file_path, start_time=date_today, pid=pid)
|
||||||
|
|
||||||
log.save()
|
log.save()
|
||||||
if self.login_type == 'web':
|
if self.login_type == 'web':
|
||||||
log.pid = log.id
|
log.pid = log.id
|
||||||
|
@ -422,9 +420,6 @@ class SshTty(Tty):
|
||||||
Connect server.
|
Connect server.
|
||||||
连接服务器
|
连接服务器
|
||||||
"""
|
"""
|
||||||
ps1 = "PS1='[\u@%s \W]\$ '\n" % self.ip
|
|
||||||
login_msg = "clear;echo -e '\\033[32mLogin %s done. Enjoy it.\\033[0m'\n" % self.ip
|
|
||||||
|
|
||||||
# 发起ssh连接请求 Make a ssh connection
|
# 发起ssh连接请求 Make a ssh connection
|
||||||
ssh = self.get_connection()
|
ssh = self.get_connection()
|
||||||
|
|
||||||
|
@ -436,20 +431,6 @@ class SshTty(Tty):
|
||||||
signal.signal(signal.SIGWINCH, self.set_win_size)
|
signal.signal(signal.SIGWINCH, self.set_win_size)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# 设置PS1并提示 Set PS1 and msg it
|
|
||||||
#channel.send(ps1)
|
|
||||||
#channel.send(login_msg)
|
|
||||||
# channel.send('echo ${SSH_TTY}\n')
|
|
||||||
# global SSH_TTY
|
|
||||||
# while not channel.recv_ready():
|
|
||||||
# time.sleep(1)
|
|
||||||
# tmp = channel.recv(1024)
|
|
||||||
#print 'ok'+tmp+'ok'
|
|
||||||
# SSH_TTY = re.search(r'(?<=/dev/).*', tmp).group().strip()
|
|
||||||
# SSH_TTY = ''
|
|
||||||
# channel.send('clear\n')
|
|
||||||
# Make ssh interactive tunnel
|
|
||||||
self.posix_shell()
|
self.posix_shell()
|
||||||
|
|
||||||
# Shutdown channel socket
|
# Shutdown channel socket
|
||||||
|
@ -584,7 +565,7 @@ class Nav(object):
|
||||||
while True:
|
while True:
|
||||||
print "请输入执行的命令, 按q退出"
|
print "请输入执行的命令, 按q退出"
|
||||||
command = raw_input("\033[1;32mCmds>:\033[0m ").strip()
|
command = raw_input("\033[1;32mCmds>:\033[0m ").strip()
|
||||||
ExecLog(host=asset_name_str, cmd=command).save()
|
ExecLog(host=asset_name_str, user=self.user.username, cmd=command, remote_ip=remote_ip).save()
|
||||||
if command == 'q':
|
if command == 'q':
|
||||||
break
|
break
|
||||||
runner.run('shell', command, pattern=pattern)
|
runner.run('shell', command, pattern=pattern)
|
||||||
|
|
|
@ -32,5 +32,6 @@ class ExecLog(models.Model):
|
||||||
user = models.CharField(max_length=100)
|
user = models.CharField(max_length=100)
|
||||||
host = models.TextField()
|
host = models.TextField()
|
||||||
cmd = models.TextField()
|
cmd = models.TextField()
|
||||||
|
remote_ip = models.CharField(max_length=100)
|
||||||
datetime = models.DateTimeField(auto_now=True)
|
datetime = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
|
|
|
@ -444,13 +444,14 @@ def perm_role_push(request):
|
||||||
if password_push or key_push:
|
if password_push or key_push:
|
||||||
role_chosen_aliase = {} # {'dev': 'NETWORKING, SHUTDOWN'}
|
role_chosen_aliase = {} # {'dev': 'NETWORKING, SHUTDOWN'}
|
||||||
sudo_alias = set([sudo for sudo in role.sudo.all()]) # set(sudo1, sudo2, sudo3)
|
sudo_alias = set([sudo for sudo in role.sudo.all()]) # set(sudo1, sudo2, sudo3)
|
||||||
role_chosen_aliase[role.name] = ','.join(sudo.name for sudo in sudo_alias)
|
if sudo_alias:
|
||||||
|
role_chosen_aliase[role.name] = ','.join(sudo.name for sudo in sudo_alias if sudo.name)
|
||||||
add_sudo_script = get_add_sudo_script(role_chosen_aliase, sudo_alias)
|
add_sudo_script = get_add_sudo_script(role_chosen_aliase, sudo_alias)
|
||||||
ret['sudo'] = task.push_sudo_file(add_sudo_script)
|
ret['sudo'] = task.push_sudo_file(add_sudo_script)
|
||||||
|
|
||||||
if ret['sudo'].get('msg'):
|
if ret['sudo'].get('msg'):
|
||||||
ret_failed = ret['sudo'].get('msg')
|
ret_failed = ret['sudo'].get('msg')
|
||||||
# os.remove(add_sudo_script)
|
os.remove(add_sudo_script)
|
||||||
|
|
||||||
logger.debug('推送role结果: %s' % ret)
|
logger.debug('推送role结果: %s' % ret)
|
||||||
logger.debug('推送role错误: %s' % ret_failed)
|
logger.debug('推送role错误: %s' % ret_failed)
|
||||||
|
|
|
@ -221,6 +221,7 @@ class ExecHandler(tornado.websocket.WebSocketHandler):
|
||||||
self.runner = None
|
self.runner = None
|
||||||
self.assets = []
|
self.assets = []
|
||||||
self.perm = {}
|
self.perm = {}
|
||||||
|
self.remote_ip = ''
|
||||||
super(ExecHandler, self).__init__(*args, **kwargs)
|
super(ExecHandler, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
def check_origin(self, origin):
|
def check_origin(self, origin):
|
||||||
|
@ -230,6 +231,7 @@ class ExecHandler(tornado.websocket.WebSocketHandler):
|
||||||
def open(self):
|
def open(self):
|
||||||
logger.debug('Websocket: Open exec request')
|
logger.debug('Websocket: Open exec request')
|
||||||
role_name = self.get_argument('role', 'sb')
|
role_name = self.get_argument('role', 'sb')
|
||||||
|
self.remote_ip = self.request.remote_ip
|
||||||
logger.debug('Web执行命令: 请求角色 %s' % role_name)
|
logger.debug('Web执行命令: 请求角色 %s' % role_name)
|
||||||
self.role = get_object(PermRole, name=role_name)
|
self.role = get_object(PermRole, name=role_name)
|
||||||
self.perm = get_group_user_perm(self.user)
|
self.perm = get_group_user_perm(self.user)
|
||||||
|
@ -256,7 +258,7 @@ class ExecHandler(tornado.websocket.WebSocketHandler):
|
||||||
self.write_message('匹配主机: ' + asset_name_str)
|
self.write_message('匹配主机: ' + asset_name_str)
|
||||||
self.write_message('<span style="color: yellow">Ansible> %s</span>\n\n' % command)
|
self.write_message('<span style="color: yellow">Ansible> %s</span>\n\n' % command)
|
||||||
self.__class__.tasks.append(MyThread(target=self.run_cmd, args=(command, pattern)))
|
self.__class__.tasks.append(MyThread(target=self.run_cmd, args=(command, pattern)))
|
||||||
ExecLog(host=asset_name_str, cmd=command).save()
|
ExecLog(host=asset_name_str, cmd=command, user=self.user.username, remote_ip=self.remote_ip).save()
|
||||||
|
|
||||||
for t in self.__class__.tasks:
|
for t in self.__class__.tasks:
|
||||||
if t.is_alive():
|
if t.is_alive():
|
||||||
|
|
Loading…
Reference in New Issue