Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. from twisted.conch import avatar, interfaces
  2. from twisted.conch.openssh_compat import primes
  3. from twisted.conch.ssh import factory, userauth, connection, keys, transport, session
  4. from twisted.conch.ssh.common import getNS
  5. from twisted.cred import portal, credentials
  6. from twisted.cred.checkers import InMemoryUsernamePasswordDatabaseDontUse
  7. from twisted.internet import reactor, protocol
  8. from twisted.internet.endpoints import TCP4ServerEndpoint, TCP6ServerEndpoint
  9. from zope.interface import implementer
  10. import json,time
  11.  
  12. class WelcomeProtocol(protocol.Protocol):
  13. def __init__(self, username):
  14. self.username = username
  15.  
  16. def connectionMade(self):
  17. self.transport.write("Welcome %s!\r\n" % (self.username))
  18. self.transport.loseConnection()
  19.  
  20. @implementer(interfaces.ISession)
  21. class Session(avatar.ConchUser):
  22. def __init__(self, username):
  23. avatar.ConchUser.__init__(self)
  24. self.username = username
  25. self.channelLookup.update({'session': session.SSHSession})
  26.  
  27. def openShell(self, transport):
  28. protocol = WelcomeProtocol(self.username)
  29. protocol.makeConnection(transport)
  30. transport.makeConnection(session.wrapProtocol(protocol))
  31.  
  32. def getPty(self, terminal, windowSize, attrs):
  33. pass
  34.  
  35. def closed(self):
  36. pass
  37.  
  38. def eofReceived(self):
  39. pass
  40.  
  41.  
  42. @implementer(portal.IRealm)
  43. class Realm(object):
  44. def requestAvatar(self, avatarId, mind, *interfaces):
  45. return interfaces[0], Session(avatarId), lambda: None
  46.  
  47.  
  48. class SSHUserPasswordLogger(userauth.SSHUserAuthServer):
  49. interfaceToMethod = {
  50. credentials.IUsernamePassword: b'password',
  51. }
  52. def serviceStarted(self):
  53. self.fp = open('auth.json','a')
  54. userauth.SSHUserAuthServer.serviceStarted(self)
  55.  
  56.  
  57. def auth_password(self, packet):
  58. password = getNS(packet[1:])[0]
  59. self.fp.writelines(json.dumps({
  60. 'timestamp':time.time(),
  61. 'host':self.transport.transport.getPeer().host,
  62. 'port':self.transport.transport.getPeer().port,
  63. 'username':self.user,
  64. 'password':password
  65. }))
  66. self.fp.flush()
  67. return userauth.SSHUserAuthServer.auth_password(self, packet)
  68.  
  69. def serviceStopped(self):
  70. self.fp.close()
  71. userauth.SSHUserAuthServer.serviceStopped(self)
  72.  
  73.  
  74. class SSHServer(factory.SSHFactory):
  75. services = {
  76. b'ssh-userauth': SSHUserPasswordLogger,
  77. b'ssh-connection': connection.SSHConnection
  78. }
  79.  
  80. def __init__(self):
  81. self.primes = primes.parseModuliFile("moduli")
  82. self.publicKeys = {
  83. 'ssh-rsa': keys.Key.fromFile("rsa.key.pub"),
  84. 'ssh-dss': keys.Key.fromFile("dsa.key.pub")
  85. }
  86. self.privateKeys = {
  87. 'ssh-rsa': keys.Key.fromFile("rsa.key"),
  88. 'ssh-dss': keys.Key.fromFile("dsa.key")
  89. }
  90.  
  91. def startFactory(self):
  92. factory.SSHFactory.startFactory(self)
  93.  
  94. def buildProtocol(self, addr):
  95. t = transport.SSHServerTransport()
  96. t.ourVersionString = "SSH-2.0-OpenSSH_7.3p1"
  97. t.supportedPublicKeys = ['ssh-rsa','ssh-dss']
  98. t.factory = self
  99. return t
  100.  
  101. portal = portal.Portal(Realm())
  102. portal.registerChecker(InMemoryUsernamePasswordDatabaseDontUse())
  103. SSHServer.portal = portal
  104.  
  105. if __name__ == '__main__':
  106. server = SSHServer()
  107. endpoint4 = TCP4ServerEndpoint(reactor, 5022)
  108. endpoint6 = TCP6ServerEndpoint(reactor, 5022)
  109. endpoint4.listen(server)
  110. endpoint6.listen(server)
  111. reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement