From 54da30d93b4b0ce1000a018b2f85d798f49ede72 Mon Sep 17 00:00:00 2001 From: ibuler Date: Sat, 1 Nov 2014 22:46:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=BA=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E7=94=A8=E5=86=8D=E6=8C=87=E5=AE=9A=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/inspectionProfiles/Project_Default.xml | 7 +++++ .../inspectionProfiles/profiles_settings.xml | 7 +++++ .idea/jumpserver.iml | 2 +- jumpserver.py | 22 ++++++++++++---- jumpserver.sh => scripts/jumpserver.sh | 0 .../pip-requirement.txt | 0 webroot/AutoSa/AutoSa/settings.py | 26 +++++++++---------- webroot/AutoSa/UserManage/models.py | 13 ++++++++++ 8 files changed, 58 insertions(+), 19 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml rename jumpserver.sh => scripts/jumpserver.sh (100%) mode change 100755 => 100644 rename pip-requirement.txt => scripts/pip-requirement.txt (100%) diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 000000000..8766f794e --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 000000000..3b312839b --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/jumpserver.iml b/.idea/jumpserver.iml index 9dcd47829..94e54876c 100644 --- a/.idea/jumpserver.iml +++ b/.idea/jumpserver.iml @@ -2,7 +2,7 @@ - + diff --git a/jumpserver.py b/jumpserver.py index 9c7a64a25..1b5d5a50a 100755 --- a/jumpserver.py +++ b/jumpserver.py @@ -1,11 +1,14 @@ #!/usr/bin/python # coding: utf-8 +cur_dir = os.path.dirname(__file__) +sys.path.append('%s/webroot/AutoSA/' % cur_dir) +os.environ['DJANGO_SETTINGS_MODULE'] = 'AutoSa.settings' + import os import sys import subprocess import MySQLdb -import pexpect import struct import fcntl import termios @@ -17,10 +20,11 @@ from binascii import b2a_hex, a2b_hex import ConfigParser import paramiko import pxssh +from UserManage.models import User + -base_dir = "/opt/jumpserver/" cf = ConfigParser.ConfigParser() -cf.read('%s/jumpserver.conf' % base_dir) +cf.read('%s/jumpserver.conf' % cur_dir) db_host = cf.get('db', 'host') db_port = cf.getint('db', 'port') @@ -34,6 +38,8 @@ assets_user_table = cf.get('jumpserver', 'assets_user_table') key = cf.get('jumpserver', 'key') + + class PyCrypt(object): """It's used to encrypt and decrypt password.""" def __init__(self, key): @@ -112,8 +118,11 @@ def connect(host, port, user, password): log_date_dir = '%s/%s' % (log_dir, time.strftime('%Y%m%d')) if not os.path.isdir(log_date_dir): os.mkdir(log_date_dir) - logfile = open("%s/%s_%s" % (log_date_dir, host, user), 'a') - logfile.write('\n\n%s\n\n' % time.strftime('%Y%m%d_%H%M%S')) + logfile = open("%s/%s_%s_%s" % (log_date_dir, host, user, time.strftime('%Y%m%d%H%M%S')), 'a') + db, cursor = connect_db(db_user, db_password, db_db, db_host, db_port) + cursor.execute('insert into logs (Fuser, Fhost, Flogfile, Fstart_time) value (%s, %s, %s, UNIX_TIMESTAMP())' + % (user, host, logfile)) + logfile.write('\n%s\n' % time.strftime('%Y/%m/%d %H:%M:%S')) try: global foo foo = pxssh.pxssh() @@ -122,10 +131,13 @@ def connect(host, port, user, password): foo.sendline('') signal.signal(signal.SIGWINCH, sigwinch_passthrough) foo.interact(escape_character=chr(28)) + cursor.execute('update logs set Ffindsh=True, Fend_time=UNIX_TIMESTAMP() where Flogfile=%s' % logfile) except pxssh.ExceptionPxssh as e: print('登录失败: %s' % e) + cursor.execute('update logs set Ffindsh=2 where Flogfile=%s' % logfile) except KeyboardInterrupt: foo.logout() + cursor.execute('update logs set Ffindsh=True, Fend_time=UNIX_TIMESTAMP() where Flogfile=%s ' % logfile) def ip_all_select(username): diff --git a/jumpserver.sh b/scripts/jumpserver.sh old mode 100755 new mode 100644 similarity index 100% rename from jumpserver.sh rename to scripts/jumpserver.sh diff --git a/pip-requirement.txt b/scripts/pip-requirement.txt similarity index 100% rename from pip-requirement.txt rename to scripts/pip-requirement.txt diff --git a/webroot/AutoSa/AutoSa/settings.py b/webroot/AutoSa/AutoSa/settings.py index a46dcf89a..ad040ae86 100644 --- a/webroot/AutoSa/AutoSa/settings.py +++ b/webroot/AutoSa/AutoSa/settings.py @@ -12,16 +12,16 @@ https://docs.djangoproject.com/en/1.6/ref/settings/ import os import ConfigParser -base_dir = "/opt/jumpserver/" -cf = ConfigParser.ConfigParser() -cf.read('%s/jumpserver.conf' % base_dir) BASE_DIR = os.path.dirname(os.path.dirname(__file__)) +CONF_DIR = os.path.dirname(os.path.dirname(BASE_DIR)) +CF = ConfigParser.ConfigParser() +CF.read('%s/jumpserver.conf' % CONF_DIR) -db_host = cf.get('db', 'host') -db_port = cf.getint('db', 'port') -db_user = cf.get('db', 'user') -db_password = cf.get('db', 'password') -db_db = cf.get('db', 'db') +DB_HOST = CF.get('db', 'host') +DB_PORT = CF.getint('db', 'port') +DB_USER = CF.get('db', 'user') +DB_PASSWORD = CF.get('db', 'password') +DB_DB = CF.get('db', 'db') # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ @@ -71,11 +71,11 @@ WSGI_APPLICATION = 'AutoSa.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', - 'NAME': db_db, - 'USER': db_user, - 'PASSWORD': db_password, - 'HOST': db_host, - 'PORT': db_port, + 'NAME': DB_DB, + 'USER': DB_USER, + 'PASSWORD': DB_PASSWORD, + 'HOST': DB_HOST, + 'PORT': DB_PORT, } } diff --git a/webroot/AutoSa/UserManage/models.py b/webroot/AutoSa/UserManage/models.py index d1bdd402b..d9f991581 100644 --- a/webroot/AutoSa/UserManage/models.py +++ b/webroot/AutoSa/UserManage/models.py @@ -23,3 +23,16 @@ class User(models.Model): return self.username +class Logs(models.Model): + user = models.CharField(max_length=50) + host = models.CharField(max_length=20) + logfile = models.CharField(max_length=1000) + finish = models.SmallIntegerField(max_length=4) + start_time = models.IntegerField() + end_time = models.IntegerField() + + def __unicode__(self): + return self.logfile + + +