コード例 #1
0
ファイル: blackHole.py プロジェクト: puntakana/BlackHole
 def getPrivateKey(self, user, environment):
     try:
         pk = PrivateKey.objects.get(user=user, environment=environment)
         try:
             if pk.type == 'DSA':
                 key = paramiko.DSSKey.from_private_key(pk)
             else:
                 key = paramiko.RSAKey.from_private_key(pk)
         except Exception as e:
             Loger.writeError("%s [%s]" % (user, e.message))
             return False
         return key
     except exceptions.ObjectDoesNotExist as e:
         return False
コード例 #2
0
ファイル: blackHole.py プロジェクト: llicour/BlackHole
 def getPrivateKey(self, user, environment):
     try:
         pk = PrivateKey.objects.get(user=user, environment=environment)
         try:
             if pk.type == 'DSA':
                 key = paramiko.DSSKey.from_private_key(pk)
             else:
                 key = paramiko.RSAKey.from_private_key(pk)   
         except Exception as e:
             Loger.writeError("%s [%s]" % (user, e.message))
             return False             
         return key
     except exceptions.ObjectDoesNotExist as e:
         return False
コード例 #3
0
ファイル: blackHole.py プロジェクト: llicour/BlackHole
 def writeSessionLog(self, host, userIdentity, loginDate, logoutDate, sessionDuration, usage, keyCount, logFile):
     try:
         blackholeServer = socket.gethostname()
         sessionLog = SessionLog(user=self.data.user,
                                    host=host,
                                    userIdentity=userIdentity,
                                    sourceIP=self.data.sourceIP,
                                    loginDate=loginDate,
                                    logoutDate=logoutDate,
                                    sessionID=self.data.sessionID,
                                    sessionDuration=sessionDuration,
                                    usage = usage,
                                    keyCount = keyCount,
                                    blackholeServer = blackholeServer,
                                    logFile = logFile)
         sessionLog.save()
     except Exception as e:
         Loger.writeError("!!%s [%s]" % (self.data.user.userName,e))
コード例 #4
0
 def __init__(self, data):
     self.token = os.urandom(4).encode('hex')
     self._palette = [
         ('message', 'black', 'dark cyan'),
         ('alert', 'dark red', 'black'),
         ('bg', 'black', 'black'),
     ]
     self.message = urwid.Text(_(u"Enter the Token for the sessionID: %s") %
                               data.sessionID,
                               align='center')
     self.response = urwid.Edit(u"", align='center')
     self.alert = urwid.Text(u"", align='center')
     try:
         EmailSender(data.user, self.token, data.sessionID)
     except Exception as e:
         Loger.writeError("Error sending eMail Token SMS to %s [%s" %
                          (data.user.email, e))
         self.alert.set_text(u"%s" % e)
コード例 #5
0
ファイル: blackHole.py プロジェクト: puntakana/BlackHole
 def writeSessionLog(self, host, userIdentity, loginDate, logoutDate,
                     sessionDuration, usage, keyCount, logFile):
     try:
         blackholeServer = socket.gethostname()
         sessionLog = SessionLog(user=self.data.user,
                                 host=host,
                                 userIdentity=userIdentity,
                                 sourceIP=self.data.sourceIP,
                                 loginDate=loginDate,
                                 logoutDate=logoutDate,
                                 sessionID=self.data.sessionID,
                                 sessionDuration=sessionDuration,
                                 usage=usage,
                                 keyCount=keyCount,
                                 blackholeServer=blackholeServer,
                                 logFile=logFile)
         sessionLog.save()
     except Exception as e:
         Loger.writeError("!!%s [%s]" % (self.data.user.userName, e))
コード例 #6
0
 def __init__(self, data):
     '''
     Constructor
     '''
     self.token = os.urandom(4).encode('hex')
     self._palette = [('message','black','dark cyan'),
                      ('alert','dark red','black'),
                      ('bg', 'black', 'black'),]
     self.message = urwid.Text(_(u"Enter the Token for the sessionID: %s") % data.sessionID, align='center')
     self.response = urwid.Edit(u"",align='center')
     self.alert = urwid.Text(u"",align='center')
     try:
         if self.sendEmail: email = EmailSender(data.user,self.token,data.sessionID)
     except Exception as e:
         Loger.writeError("Error sending eMail Token SMS to %s [%s" % (data.user.email,e))
         self.alert.set_text(u"%s" % e)
     try:
         
         if self.sendEmail: SMSSender(data.user,self.token,data.sessionID)
     except Exception as e:
         Loger.writeError("Error sending SMS Token SMS to %s [%s]" % (data.user.getFullName(),e))
         self.alert.set_text(u"%s" % e)
コード例 #7
0
 def __init__(self, blackHole, widget, size):
     """
     * blackHole: blackHole object
     * widget: HostTree object
     * size: size of the terminal
     """
     self.blackHole = blackHole
     self.hostConnection = widget.hostConnectionObject
     self.widget = widget
     self.size = size
     self.userConnection = self.hostConnection.getConnectionUser(self.blackHole.data.user)
     self.enterCount = 0
     self.keyCount = 0
     self.sessionStartDate = datetime.now()
     self.sessionStopDate = None
     self.closed = False
     self.logFile = None
     
     try:
         paramiko_log_file = "/tmp/blackhole_%s.debug.log" % self.blackHole.data.user.userName
         if not os.path.exists(paramiko_log_file):
             open(paramiko_log_file, 'w').close()
         paramiko.util.log_to_file(paramiko_log_file)
         try:
         #Create the Socket
             sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             sock.settimeout(3)
             sock.connect((self.hostConnection.host.ip, self.hostConnection.host.port))
         except Exception as e:
             exceptionMsg = "*** Connect failed: [%s] to %s" % (str(e), self.hostConnection.host.name)
             Loger.writeError(exceptionMsg)
             raise Exception(exceptionMsg)
         try:
             # Create the Transport
             t = paramiko.Transport(sock)
             try:
                 #Connect to the ssh server
                 t.start_client()
                 try:
                     t.auth_publickey(self.userConnection, self.widget.pk)
                     Loger.write("[login] user=%s to=%s as=%s sessionID=%s" % (self.blackHole.data.user.userName, self.hostConnection.host.name, self.userConnection, self.blackHole.data.sessionID))
                 except paramiko.SSHException as e:
                     t.close()
                     sock.close()
                     Loger.writeError("%s [%s] %s " % (self.blackHole.data.user.userName, self.hostConnection.host.name, e.message))
                     raise Exception(e)  
                 chan = t.open_session()
                 cols, rows = size
                 chan.get_pty('xterm', cols, rows)
                 chan.invoke_shell()
                 self.interactiveShell(chan)
                 chan.close()
                 t.close()
                 sock.close()    
                 self.closeLog()
             except paramiko.SSHException as e:
                 exceptionMsg = '*** SSH negotiation failed to %s.' % self.hostConnection.host.name
                 Loger.writeError(exceptionMsg)
                 t.close()
                 sock.close()
                 raise Exception(exceptionMsg)
             except Exception as e:
                 raise(e)
         except Exception as e:
             raise Exception(e)
     except Exception as e:
         raise Exception(e)
コード例 #8
0
 def interactiveShell(self, chan):
     signal.signal(signal.SIGHUP, self.closeLog)
     oldtty = termios.tcgetattr(sys.stdin)
     log = self.blackHole.data.user.logEnable
     if log:
         try:
             if os.path.isdir(os.path.join(self.blackHole.settings.log_path, self.blackHole.data.user.profile.name)):
                 logFile = "%s/%s/%s-%s-%s-%i_%s.log" % (self.blackHole.settings.log_path,
                                                         self.blackHole.data.user.profile.name,
                                                         self.blackHole.data.user.userName,
                                                         self.userConnection, 
                                                         self.hostConnection.host.name,
                                                         self.blackHole.data.sessionID,
                                                         self.sessionStartDate.strftime("%Y%m%d_%H%M%S"))
             else:
                 Loger.writeError("[ERROR] Log Path don't Exists: %s" % os.path.join(self.blackHole.settings.log_path, self.blackHole.data.user.profile.name))
                 logFile = "%s/%s-%s-%s-%i_%s.log" % (self.blackHole.settings.log_path,
                                                      self.blackHole.data.user.userName,
                                                      self.userConnection,
                                                      self.hostConnection.host.name,
                                                      self.blackHole.data.sessionID,
                                                      self.sessionStartDate.strftime("%Y%m%d_%H%M%S"))
             self.logFile = logFile
             file = open(logFile, 'w')
             os.chmod(file.name, stat.S_IRUSR | stat.S_IRGRP | stat.S_IWRITE | stat.S_IWGRP | stat.S_IROTH)
         except Exception as e:
             raise Exception("Creating log File [%s]" % e)
     try:
         tty.setraw(sys.stdin.fileno())
         tty.setcbreak(sys.stdin.fileno())
         chan.settimeout(0.0)
         if log: 
             file.write("-------------- TIME STAMP: %s --------------\n" % self.sessionStartDate.strftime("%Y-%m-%d %H:%M"))
         while True:
             r, w, e = select.select([chan, sys.stdin], [], [])
             if chan in r:
                 try:
                     x = chan.recv(1024)
                     if len(x) == 0:
                         break
                     if log:
                         try:
                             file.write(str(x).decode().replace('\r', ''))
                             file.flush()
                             os.fsync(file.fileno())
                         except:
                             file.write(str(x))
                             file.flush()
                             os.fsync(file.fileno())
                     sys.stdout.write(x)
                     sys.stdout.flush()                      
                 except socket.timeout:
                     break
                         #raise Exception(e)
             if sys.stdin in r:
                 x = os.read(sys.stdin.fileno(), 1)
                 if len(x) == 0:
                     break
                 chan.send(x)
                 if log:
                     if chr(13) in x:
                         file.write("\n[TIME STAMP: %s ]\n" % datetime.now().strftime("%Y-%m-%d %H:%M"))
                         file.flush()
                         os.fsync(file.fileno())
                         self.enterCount += 1
                     else:
                         self.keyCount += 1
     except:
         pass
     finally:
         termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
         if log:
             file.close()
コード例 #9
0
 def __init__(self, user):
     messageString = _("The user %(username)s is only enabled from %(from)s to %(to)s")
     self.message = messageString % {'username':user.getFullName(),
                                         'from':user.timeFrom,
                                         'to':user.timeTo}
     Loger.writeError(self.message)         
コード例 #10
0
 def __init__(self, user):
     messageString = _("The user %(username)s is only enabled from %(from)s to %(to)s")
     self.message = messageString % {'username': user.getFullName(),
                                     'from': user.timeFrom,
                                     'to': user.timeTo}
     Loger.writeError(self.message)         
コード例 #11
0
 def __init__(self, user):
     self.message = _("The user %s is not enabled.") % user.getFullName()
     Loger.writeError(self.message)
コード例 #12
0
 def __init__(self, _message):
     self.message = _("Error Loading Settings: %s") % _message   
     Loger.writeError(self.message)
コード例 #13
0
 def __init__(self, fileName):
     self.fileName = fileName
     self.message = _("File %s is Missing") % self.fileName
     Loger.writeError(self.message)
コード例 #14
0
    def __init__(self, widget, size):
        """
        * blackHole: blackHole object
        * widget: HostTree object
        * size: size of the terminal
        """
        self.blackHole = blackHole.BlackHole.instance
        self.hostConnection = widget.hostConnectionObject
        self.widget = widget
        self.size = size
        self.userConnection = self.hostConnection.getConnectionUser(
            self.blackHole.data.user)
        self.sessionStartDate = datetime.now()
        self.sessionStopDate = None
        self.closed = False
        self.logFile = None

        try:
            paramiko.util.logging.getLogger().setLevel(30)
            try:
                #Create the Socket
                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                sock.settimeout(3)
                sock.connect((self.hostConnection.host.ip,
                              self.hostConnection.host.port))
            except Exception as e:
                exceptionMsg = "*** Connect failed: [%s] to %s" % (
                    str(e), self.hostConnection.host.name)
                Loger.writeError(exceptionMsg)
                raise Exception(exceptionMsg)
            try:
                # Create the Transport
                t = paramiko.Transport(sock)
                try:
                    #Connect to the ssh server
                    t.start_client()
                    try:
                        t.auth_publickey(self.userConnection, self.widget.pk)
                        Loger.write(
                            "[login] user=%s to=%s as=%s sessionID=%s" %
                            (self.blackHole.data.user.userName,
                             self.hostConnection.host.name,
                             self.userConnection,
                             self.blackHole.data.sessionID))
                    except paramiko.SSHException as e:
                        t.close()
                        sock.close()
                        Loger.writeError(
                            "%s [%s] %s " %
                            (self.blackHole.data.user.userName,
                             self.hostConnection.host.name, e.message))
                        raise Exception(e)
                    chan = t.open_session()
                    cols, rows = size
                    chan.get_pty('xterm', cols, rows)
                    chan.invoke_shell()
                    self.interactiveShell(chan)
                    chan.close()
                    t.close()
                    sock.close()
                    self.closeLog()
                except paramiko.SSHException as e:
                    exceptionMsg = '*** SSH negotiation failed to %s.' % self.hostConnection.host.name
                    Loger.writeError(exceptionMsg)
                    t.close()
                    sock.close()
                    raise Exception(exceptionMsg)
                except Exception as e:
                    raise e
            except Exception as e:
                raise Exception(e)
        except Exception as e:
            raise Exception(e)
コード例 #15
0
 def interactiveShell(self, chan):
     signal.signal(signal.SIGHUP, self.closeLog)
     oldtty = termios.tcgetattr(sys.stdin)
     log = self.blackHole.data.user.logEnable
     if log:
         try:
             if os.path.isdir(
                     os.path.join(self.blackHole.settings.log_path,
                                  self.blackHole.data.user.profile.name)):
                 logFile = "%s/%s/%s-%s-%s-%i_%s.log" % (
                     self.blackHole.settings.log_path,
                     self.blackHole.data.user.profile.name,
                     self.blackHole.data.user.userName, self.userConnection,
                     self.hostConnection.host.name,
                     self.blackHole.data.sessionID,
                     self.sessionStartDate.strftime("%Y%m%d_%H%M%S"))
             else:
                 Loger.writeError(
                     "[ERROR] Log Path don't Exists: %s" %
                     os.path.join(self.blackHole.settings.log_path,
                                  self.blackHole.data.user.profile.name))
                 logFile = "%s/%s-%s-%s-%i_%s.log" % (
                     self.blackHole.settings.log_path,
                     self.blackHole.data.user.userName, self.userConnection,
                     self.hostConnection.host.name,
                     self.blackHole.data.sessionID,
                     self.sessionStartDate.strftime("%Y%m%d_%H%M%S"))
             self.logFile = logFile
             file = open(logFile, 'w')
             os.chmod(
                 file.name, stat.S_IRUSR | stat.S_IRGRP | stat.S_IWRITE
                 | stat.S_IWGRP | stat.S_IROTH)
         except Exception as e:
             raise Exception("Creating log File [%s]" % e)
     try:
         tty.setraw(sys.stdin.fileno())
         tty.setcbreak(sys.stdin.fileno())
         chan.settimeout(0.0)
         if log:
             file.write("-------------- TIME STAMP: %s --------------\n" %
                        self.sessionStartDate.strftime("%Y-%m-%d %H:%M"))
         while True:
             r, w, e = select.select([chan, sys.stdin], [], [])
             if chan in r:
                 try:
                     x = chan.recv(1024)
                     if len(x) == 0:
                         break
                     if log:
                         try:
                             file.write(str(x).decode().replace('\r', ''))
                             file.flush()
                             os.fsync(file.fileno())
                         except:
                             file.write(str(x))
                             file.flush()
                             os.fsync(file.fileno())
                     sys.stdout.write(x)
                     sys.stdout.flush()
                 except socket.timeout:
                     break
                     #raise Exception(e)
             if sys.stdin in r:
                 x = os.read(sys.stdin.fileno(), 1)
                 if len(x) == 0:
                     break
                 chan.send(x)
     except:
         pass
     finally:
         termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)
         if log:
             file.close()
コード例 #16
0
 def __init__(self, fileName):
     self.fileName = fileName
     self.message = _("File %s is Missing") % self.fileName
     Loger.writeError(self.message)
コード例 #17
0
 def __init__(self, _message):
     self.message = _("Error Loading Settings: %s") % _message   
     Loger.writeError(self.message)
コード例 #18
0
 def __init__(self, userName):
     self.message = _("Unknown User [%s]") % userName
     Loger.writeError(self.message)
コード例 #19
0
 def __init__(self, userName):
     self.message = _("Unknown User [%s]") % userName
     Loger.writeError(self.message)
コード例 #20
0
 def __init__(self, _message=""):
     self.message = _("DataBase Error: %s ") % _message   
     Loger.writeError(self.message)
コード例 #21
0
 def __init__(self, user):
     self.message = _("The user %s is not enabled.") % user.getFullName()
     Loger.writeError(self.message)
コード例 #22
0
 def __init__(self):
     self.message = _("Missing BlackHole Instance")
     Loger.writeError(self.message)
コード例 #23
0
 def __init__(self, _message=""):
     self.message = _("DataBase Error: %s ") % _message   
     Loger.writeError(self.message)