From ea60224f28cf702053d8fd06ef32cc683ed4aff1 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 29 Jan 2013 18:48:09 +0100 Subject: //services test.py -> test-server.py --- services/Makefile | 2 +- services/test-server.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ services/test.py | 108 ------------------------------------------------ 3 files changed, 109 insertions(+), 109 deletions(-) create mode 100755 services/test-server.py delete mode 100644 services/test.py diff --git a/services/Makefile b/services/Makefile index 3ef670a3..61e0f529 100644 --- a/services/Makefile +++ b/services/Makefile @@ -32,7 +32,7 @@ test-client: ssh localhost -p 1337 2>/dev/null test-server: - python test.py + ./test-server.py $(host_key_file): ssh-keygen -t rsa -P '' -f $@ diff --git a/services/test-server.py b/services/test-server.py new file mode 100755 index 00000000..ce8fbaa4 --- /dev/null +++ b/services/test-server.py @@ -0,0 +1,108 @@ +#! /usr/bin/env python2 + +from os import environ as env + +authorized_keys_file = env.get('authorized_keys_file', '/dev/null') +services_file = env.get('services_file', '/dev/null') +host_key_file = env.get('host_key_file', '/dev/null') +host_key_pub_file = host_key_file + '.pub' + + +from checkers import PublicKeyChecker +from twisted.conch.avatar import ConchUser +from twisted.conch.ssh.connection import SSHConnection +from twisted.conch.ssh.factory import SSHFactory +from twisted.conch.ssh.keys import Key +from twisted.conch.ssh.session import SSHSession, ISession, wrapProtocol +from twisted.conch.ssh.userauth import SSHUserAuthServer +from twisted.cred.error import UnauthorizedLogin +from twisted.cred.portal import IRealm, Portal +from twisted.internet.protocol import Protocol +from twisted.internet.reactor import listenTCP, run +from twisted.python.components import registerAdapter +from zope.interface import implements + +from twisted.python.log import startLogging +from sys import stderr +startLogging(stderr) + + +class MyRealm: + implements(IRealm) + + def requestAvatar(self, avatarId, mind, *interfaces): + return interfaces[0], MyUser(), lambda: None + + +class MyUser(ConchUser): + def __init__(self): + ConchUser.__init__(self) + self.channelLookup.update({ 'session': SSHSession }) + + +class MySession: + + def __init__(self, avatar): + pass + + def getPty(self, term, windowSize, attrs): + pass + + def execCommand(self, proto, cmd): + raise Exception("no executing commands") + + def openShell(self, trans): + ep = MyProtocol() + ep.makeConnection(trans) + trans.makeConnection(wrapProtocol(ep)) + + def eofReceived(self): + pass + + def closed(self): + pass + + +registerAdapter(MySession, MyUser, ISession) + + +def slurpTextfile(filename): + file = open(filename, 'r') + try: + return file.read() + finally: + file.close() + +class MyProtocol(Protocol): + def connectionMade(self): + data = slurpTextfile(services_file).replace('\n', '\r\n') + self.transport.write(data) + self.transport.loseConnection() + + #def dataReceived(self, data): + # if data == '\r': + # data = '\r\n' + # elif data == '\x03': #^C + # self.transport.loseConnection() + # return + # self.transport.write(data) + + +class MyFactory(SSHFactory): + privateKeys = { + 'ssh-rsa': Key.fromFile(filename=host_key_file) + } + publicKeys = { + 'ssh-rsa': Key.fromFile(filename=host_key_pub_file) + } + services = { + 'ssh-userauth': SSHUserAuthServer, + 'ssh-connection': SSHConnection + } + +if __name__ == '__main__': + portal = Portal(MyRealm()) + portal.registerChecker(PublicKeyChecker(authorized_keys_file)) + MyFactory.portal = portal + listenTCP(1337, MyFactory()) + run() diff --git a/services/test.py b/services/test.py deleted file mode 100644 index 06340a54..00000000 --- a/services/test.py +++ /dev/null @@ -1,108 +0,0 @@ -#! /usr/bin/env python - -from os import environ as env - -authorized_keys_file = env.get('authorized_keys_file', '/dev/null') -services_file = env.get('services_file', '/dev/null') -host_key_file = env.get('host_key_file', '/dev/null') -host_key_pub_file = host_key_file + '.pub' - - -from checkers import PublicKeyChecker -from twisted.conch.avatar import ConchUser -from twisted.conch.ssh.connection import SSHConnection -from twisted.conch.ssh.factory import SSHFactory -from twisted.conch.ssh.keys import Key -from twisted.conch.ssh.session import SSHSession, ISession, wrapProtocol -from twisted.conch.ssh.userauth import SSHUserAuthServer -from twisted.cred.error import UnauthorizedLogin -from twisted.cred.portal import IRealm, Portal -from twisted.internet.protocol import Protocol -from twisted.internet.reactor import listenTCP, run -from twisted.python.components import registerAdapter -from zope.interface import implements - -from twisted.python.log import startLogging -from sys import stderr -startLogging(stderr) - - -class MyRealm: - implements(IRealm) - - def requestAvatar(self, avatarId, mind, *interfaces): - return interfaces[0], MyUser(), lambda: None - - -class MyUser(ConchUser): - def __init__(self): - ConchUser.__init__(self) - self.channelLookup.update({ 'session': SSHSession }) - - -class MySession: - - def __init__(self, avatar): - pass - - def getPty(self, term, windowSize, attrs): - pass - - def execCommand(self, proto, cmd): - raise Exception("no executing commands") - - def openShell(self, trans): - ep = MyProtocol() - ep.makeConnection(trans) - trans.makeConnection(wrapProtocol(ep)) - - def eofReceived(self): - pass - - def closed(self): - pass - - -registerAdapter(MySession, MyUser, ISession) - - -def slurpTextfile(filename): - file = open(filename, 'r') - try: - return file.read() - finally: - file.close() - -class MyProtocol(Protocol): - def connectionMade(self): - data = slurpTextfile(services_file).replace('\n', '\r\n') - self.transport.write(data) - self.transport.loseConnection() - - #def dataReceived(self, data): - # if data == '\r': - # data = '\r\n' - # elif data == '\x03': #^C - # self.transport.loseConnection() - # return - # self.transport.write(data) - - -class MyFactory(SSHFactory): - privateKeys = { - 'ssh-rsa': Key.fromFile(filename=host_key_file) - } - publicKeys = { - 'ssh-rsa': Key.fromFile(filename=host_key_pub_file) - } - services = { - 'ssh-userauth': SSHUserAuthServer, - 'ssh-connection': SSHConnection - } - -if __name__ == '__main__': - portal = Portal(MyRealm()) - portal.registerChecker(PublicKeyChecker(authorized_keys_file)) - MyFactory.portal = portal - listenTCP(1337, MyFactory()) - run() -- cgit v1.2.3