Beispiel #1
0
 def __init__(self, SETTINGS_FILE):
     """
     Creates an instance of BlackHole
     Arguments:
     SETTINGS_FILE: Path of the settings File
     """
     self.settings = None
     self.data = None
     self.information = None
     try:
         self._loadData(SETTINGS_FILE)
         Loger.write(self)
         if self.data.user.enable:
             if self.data.user.timeEnabled:
                 now = datetime.now().time().replace(second=0)
                 if not (self.data.user.timeFrom < now <
                         self.data.user.timeTo):
                     raise UserDisabledTime(self.data.user)
             self.data.user.lastLogin = datetime.now()
             self.data.user.save()
         else:
             raise UserDisabled(self.data.user)
         self.blackHoleBrowser = cursesGui.BlackHoleBrowser(self)
     except OperationalError as e:
         raise MysqlException(e)
     except Exception as e:
         raise e
Beispiel #2
0
 def __init__(self, SETTINGS_FILE):
     """
     Creates an instance of BlackHole
     Arguments:
     SETTINGS_FILE: Path of the settings File
     """
     self.settings = None
     self.data = None
     self.information = None
     try:
         self._loadData(SETTINGS_FILE)
         Loger.write(self)  
         if self.data.user.enable:
             if self.data.user.timeEnabled:
                 now = datetime.now().time().replace(second=0)
                 if not (self.data.user.timeFrom < now < self.data.user.timeTo):
                     raise UserDisabledTime(self.data.user)
             self.data.user.lastLogin = datetime.now()
             self.data.user.save()
         else:
             raise UserDisabled(self.data.user)       
         self.blackHoleBrowser = cursesGui.BlackHoleBrowser(self)
     except OperationalError as e:
         raise MysqlException(e)
     except Exception as e:
         raise e
Beispiel #3
0
 def closeLog(self, signum=None, frame=None):
     if not self.closed:
         self.sessionStopDate = datetime.now()
         sessionDuration = round((self.sessionStopDate - self.sessionStartDate).total_seconds() / 60, 3)
         usage = "%s/%s" % (self.enterCount, sessionDuration)
         Loger.write("[logout] user=%s to=%s as=%s sessionID=%s usage=%s" % (self.blackHole.data.user.userName, self.hostConnection.host.name, self.userConnection, self.blackHole.data.sessionID, usage))
         self.blackHole.writeSessionLog(self.hostConnection.host,
                                        self.hostConnection.userAuthentication,
                                        self.sessionStartDate,
                                        self.sessionStopDate,
                                        sessionDuration,
                                        round(self.enterCount/sessionDuration,3),
                                        self.keyCount,
                                        self.logFile)
         self.closed = True
Beispiel #4
0
    def closeLog(self, signum=None, frame=None):
        if not self.closed:
            self.sessionStopDate = datetime.now()
            sessionDuration = round(
                (self.sessionStopDate - self.sessionStartDate).total_seconds()
                / 60, 3)

            Loger.write("[logout] user=%s to=%s as=%s sessionID=%s" %
                        (self.blackHole.data.user.userName,
                         self.hostConnection.host.name, self.userConnection,
                         self.blackHole.data.sessionID))
            self.blackHole.writeSessionLog(
                self.hostConnection.host,
                self.hostConnection.userAuthentication, self.sessionStartDate,
                self.sessionStopDate, sessionDuration, self.logFile)
            self.closed = True
Beispiel #5
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)
Beispiel #6
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)
Beispiel #7
0
 def run(self):
     """Handle user input and display updating."""
     try:
         self.ui.tty_signal_keys('undefined', 'undefined', 'undefined',
                                 'undefined', 'undefined')
         self.ui.set_mouse_tracking()
         self.size = self.ui.get_cols_rows()
         while 1:
             focus, _ign = self.listbox.body.get_focus()
             self.header_text = [
                 ('footer_msg',
                  "BlackHole (v%s)" % black_hole.get_version()),
                 " ",
                 ('footer_msg', _("User:"******" ",
                 ('key', "%s" % self.user.getFullName()),
                 " ",
                 ('footer_msg', _("- Selected:")),
                 " ",
                 ('key', "%s" % focus.description),
             ]
             self.header.set_text(self.header_text)
             canvas = self.view.render(self.size, focus=1)
             self.ui.draw_screen(self.size, canvas)
             keys = None
             while not keys:
                 keys = self.ui.get_input()
             for k in keys:
                 if urwid.is_mouse_event(k):
                     event, button, col, row = k
                     self.view.mouse_event(self.size,
                                           event,
                                           button,
                                           col,
                                           row,
                                           focus=True)
                     _widget, _tupla = self.listbox.get_focus()
                     if isinstance(_widget, HostTree):
                         if _widget.lastWasDoubleClick(
                         ) and event == 'mouse press':
                             self.validate(_widget)
                 else:
                     if k == 'window resize':
                         self.size = self.ui.get_cols_rows()
                     elif k in ('q', 'Q'):
                         self.quit = True
                         self.stopUI()
                         return
                     elif k in ('c', 'C'):
                         if self.blackHole.settings.chat_enabled:
                             self.stopUI()
                             self.startChat()
                             self.startUI()
                         Loger.write(_("Chat not Enabled"))
                     elif k == 'right':
                         # right can behave like +
                         k = "+"
                     k = self.view.keypress(self.size, k)
                     if k == "enter":
                         _widget, _tupla = self.listbox.get_focus()
                         if isinstance(_widget, HostTree):
                             self.validate(_widget)
                         else:
                             continue
                     elif k == 'left':
                         self.move_focus_to_parent(self.size)
                     elif k == '-':
                         self.collapse_focus_parent(self.size)
                     elif k == 'home':
                         self.focus_home(self.size)
                     elif k == 'end':
                         self.focus_end(self.size)
     except Exception as e:
         raise Exception(e.message)
Beispiel #8
0
 def run(self):
     """Handle user input and display updating."""
     try:
         self.ui.tty_signal_keys('undefined', 'undefined', 'undefined', 'undefined', 'undefined')
         self.ui.set_mouse_tracking()
         self.size = self.ui.get_cols_rows()
         while 1:          
             focus, _ign = self.listbox.body.get_focus()
             self.header_text = [
         ('footer_msg', "BlackHole (v%s)" % black_hole.get_version()) , " ",
         ('footer_msg', _("User:"******" ",
         ('key', "%s" % self.user.getFullName()), " ",
         ('footer_msg', _("- Selected:")) , " ",
         ('key', "%s" % focus.description),
         ]
             self.header.set_text(self.header_text)
             canvas = self.view.render(self.size, focus=1)
             self.ui.draw_screen(self.size, canvas)
             keys = None
             while not keys:
                 keys = self.ui.get_input()
             for k in keys:
                 if urwid.is_mouse_event(k):
                     event, button, col, row = k
                     self.view.mouse_event(self.size, event, button, col, row, focus=True)
                     _widget, _tupla = self.listbox.get_focus()
                     if isinstance(_widget, HostTree):
                         if _widget.lastWasDoubleClick() and event == 'mouse press':
                             self.validate(_widget)
                 else:
                     if k == 'window resize':
                         self.size = self.ui.get_cols_rows()
                     elif k in ('q', 'Q'):
                         self.quit = True
                         self.stopUI()
                         return
                     elif k in ('c', 'C'):
                         if self.blackHole.settings.chat_enabled:
                             self.stopUI()
                             self.startChat()
                             self.startUI()
                         Loger.write(_("Chat not Enabled"))
                     elif k == 'right':
                         # right can behave like +
                         k = "+"
                     k = self.view.keypress(self.size, k)
                     if k == "enter":
                         _widget, _tupla = self.listbox.get_focus()
                         if isinstance(_widget, HostTree):
                             self.validate(_widget)
                         else:
                             continue
                     elif k == 'left':
                         self.move_focus_to_parent(self.size)
                     elif k == '-':
                         self.collapse_focus_parent(self.size)
                     elif k == 'home':
                         self.focus_home(self.size)
                     elif k == 'end':
                         self.focus_end(self.size)
     except Exception as e:
             raise Exception(e.message)