恢复错误修复

pull/26/head
ibuler 2015-12-03 18:49:04 +08:00
parent 6f4fd18c47
commit 33663783cc
4 changed files with 15 additions and 30 deletions

View File

@ -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的pidweb terminal记录为日志的id if self.login_type == 'ssh': # 如果是ssh连接过来记录connect.py的pidweb 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
@ -559,7 +540,7 @@ class Nav(object):
color_print('错误输入') color_print('错误输入')
else: else:
role = role_check[int(role_id)] role = role_check[int(role_id)]
elif len(roles) == 1: # 授权角色数为1 elif len(roles) == 1: # 授权角色数为1
role = roles[0] role = roles[0]
assets = list(self.user_perm.get('role', {}).get(role).get('asset')) # 获取该用户,角色授权主机 assets = list(self.user_perm.get('role', {}).get(role).get('asset')) # 获取该用户,角色授权主机
print "该角色有权限的所有主机" print "该角色有权限的所有主机"
@ -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)

View File

@ -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)

View File

@ -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:
add_sudo_script = get_add_sudo_script(role_chosen_aliase, sudo_alias) role_chosen_aliase[role.name] = ','.join(sudo.name for sudo in sudo_alias if sudo.name)
ret['sudo'] = task.push_sudo_file(add_sudo_script) add_sudo_script = get_add_sudo_script(role_chosen_aliase, sudo_alias)
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)

View File

@ -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():