diff --git a/kippo/core/auth.py b/kippo/core/auth.py index f1e3eed5..df3a741b 100644 --- a/kippo/core/auth.py +++ b/kippo/core/auth.py @@ -124,7 +124,8 @@ class HoneypotPublicKeyChecker: def requestAvatarId(self, credentials): _pubKey = keys.Key.fromString(credentials.blob) - log.msg( 'Public Key attempt for user %s with fingerprint %s' % ( credentials.username, _pubKey.fingerprint() ) ) + log.msg(format='public key attempt for user %(username)s with fingerprint %(fingerprint)%s', + username=credentials.username, fingerprint=_pubKey.fingerprint()) return failure.Failure(error.ConchError("Incorrect signature")) @implementer(ICredentialsChecker) diff --git a/kippo/core/dblog.py b/kippo/core/dblog.py index f08b69e8..70e9916e 100644 --- a/kippo/core/dblog.py +++ b/kippo/core/dblog.py @@ -45,6 +45,7 @@ class DBLogger(object): 'KIPP0009': self.handleClientVersion, 'KIPP0010': self.handleTerminalSize, 'KIPP0011': self._connectionLost, + 'KIPP0012': self.handleTTYLogClosed, } self.start(cfg) @@ -126,9 +127,13 @@ class DBLogger(object): def createSession(self, peerIP, peerPort, hostIP, hostPort): return 0 - # args has: logfile + # args has: ttylog def handleTTYLogOpened(self, session, args): - self.ttylogs[session] = args['logfile'] + self.ttylogs[session] = args['ttylog'] + + # args has: ttylog + def handleTTYLogClosed(self, session, args): + self.ttylogs[session] = args['ttylog'] # args is empty def handleConnectionLost(self, session, args): diff --git a/kippo/core/protocol.py b/kippo/core/protocol.py index 73eedbb9..905673dc 100644 --- a/kippo/core/protocol.py +++ b/kippo/core/protocol.py @@ -35,8 +35,6 @@ class HoneyPotBaseProtocol(insults.TerminalProtocol): transport.factory.logDispatch(*msg,**args) def connectionMade(self): - self.displayMOTD() - transport = self.terminal.transport.session.conn.transport self.realClientIP = transport.transport.getPeer().host @@ -60,12 +58,6 @@ class HoneyPotBaseProtocol(insults.TerminalProtocol): self.kippoIP = s.getsockname()[0] s.close() - def displayMOTD(self): - try: - self.writeln(self.fs.file_contents('/etc/motd')) - except: - pass - # this is only called on explicit logout, not on disconnect def connectionLost(self, reason): log.msg( eventid='KIPP0011', format='Connection lost') @@ -155,6 +147,7 @@ class HoneyPotInteractiveProtocol(HoneyPotBaseProtocol, recvline.HistoricRecvLin HoneyPotBaseProtocol.__init__(self, avatar, env) def connectionMade(self): + self.displayMOTD() HoneyPotBaseProtocol.connectionMade(self) recvline.HistoricRecvLine.connectionMade(self) @@ -177,6 +170,12 @@ class HoneyPotInteractiveProtocol(HoneyPotBaseProtocol, recvline.HistoricRecvLin '\x15': self.handle_CTRL_U, # CTRL-U }) + def displayMOTD(self): + try: + self.writeln(self.fs.file_contents('/etc/motd')) + except: + pass + # this doesn't seem to be called upon disconnect, so please use # HoneyPotTransport.connectionLost instead def connectionLost(self, reason): @@ -239,8 +238,8 @@ class LoggingServerProtocol(insults.ServerProtocol): time.strftime('%Y%m%d-%H%M%S'), transport.transportId ) self.ttylog_file = transport.ttylog_file - log.msg( eventid='KIPP0004', logfile=transport.ttylog_file, - format='Opening TTY Log: %(logfile)s') + log.msg( eventid='KIPP0004', ttylog=transport.ttylog_file, + format='Opening TTY Log: %(ttylog)s') ttylog.ttylog_open(transport.ttylog_file, time.time()) self.ttylog_open = True diff --git a/kippo/core/ssh.py b/kippo/core/ssh.py index 903722da..26341a93 100644 --- a/kippo/core/ssh.py +++ b/kippo/core/ssh.py @@ -178,7 +178,7 @@ class HoneyPotRealm: return interfaces[0], \ HoneyPotAvatar(avatarId, self.env), lambda: None else: - raise Exception, "No supported interfaces found." + raise Exception("No supported interfaces found.") class HoneyPotTransport(sshserver.KippoSSHServerTransport): """ @@ -330,8 +330,8 @@ class HoneyPotAvatar(avatar.ConchUser): cfg.get('honeypot', 'exec_enabled').lower() not in \ ('yes', 'true', 'on'): log.msg( 'Exec disabled. Not executing command: "%s"' % cmd ) - raise exceptions.NotEnabledException, \ - 'exec_enabled not enabled in configuration file!' + raise exceptions.NotEnabledException( + 'exec_enabled not enabled in configuration file!') return log.msg( 'exec command: "%s"' % cmd ) diff --git a/kippo/dblog/mysql.py b/kippo/dblog/mysql.py index 0e049a46..285d45dc 100644 --- a/kippo/dblog/mysql.py +++ b/kippo/dblog/mysql.py @@ -20,7 +20,7 @@ class ReconnectingConnectionPool(adbapi.ConnectionPool): try: return adbapi.ConnectionPool._runInteraction( self, interaction, *args, **kw) - except MySQLdb.OperationalError, e: + except MySQLdb.OperationalError as e: if e[0] not in (2006, 2013): raise log.msg("RCP: got error %s, retrying operation" %(e))