Login timeout now 2 minutes like openssh

This commit is contained in:
Michel Oosterhof
2015-11-19 14:46:55 +00:00
parent a0a1de4704
commit 1dfece37b4

View File

@ -27,6 +27,7 @@ from twisted.python import log, components
from twisted.conch.openssh_compat import primes from twisted.conch.openssh_compat import primes
from twisted.conch.ssh.common import NS, getNS from twisted.conch.ssh.common import NS, getNS
from twisted.internet import defer from twisted.internet import defer
from twisted.protocols.policies import TimeoutMixin
from cowrie.core import credentials from cowrie.core import credentials
from cowrie.core import auth from cowrie.core import auth
@ -272,7 +273,7 @@ class HoneyPotSSHFactory(factory.SSHFactory):
return t return t
class HoneyPotTransport(transport.SSHServerTransport): class HoneyPotTransport(transport.SSHServerTransport, TimeoutMixin):
""" """
""" """
@ -293,6 +294,7 @@ class HoneyPotTransport(transport.SSHServerTransport):
self.transport.write('%s\r\n' % (self.ourVersionString,)) self.transport.write('%s\r\n' % (self.ourVersionString,))
self.currentEncryptions = transport.SSHCiphers('none', 'none', 'none', 'none') self.currentEncryptions = transport.SSHCiphers('none', 'none', 'none', 'none')
self.currentEncryptions.setKeys('', '', '', '', '', '') self.currentEncryptions.setKeys('', '', '', '', '', '')
self.setTimeout(120)
def sendKexInit(self): def sendKexInit(self):
# Don't send key exchange prematurely # Don't send key exchange prematurely
@ -349,6 +351,18 @@ class HoneyPotTransport(transport.SSHServerTransport):
return transport.SSHServerTransport.ssh_KEXINIT(self, packet) return transport.SSHServerTransport.ssh_KEXINIT(self, packet)
def timeoutConnection(self):
log.msg( "Authentication Timeout reached" )
self.transport.loseConnection()
def setService(self, service):
"""
Remove login grace timeout
"""
if service.name == "ssh-connection":
self.setTimeout(None)
transport.SSHServerTransport.setService(self, service)
# this seems to be the only reliable place of catching lost connection # this seems to be the only reliable place of catching lost connection
def connectionLost(self, reason): def connectionLost(self, reason):
for i in self.interactors: for i in self.interactors: