繁体   English   中英

如何管理Twisted SSH服务器连接

[英]How to manage Twisted SSH server connections

我需要创建一个可以接受多个命令的扭曲SSH服务器。 但是主要功能是服务器应该管理连接。 更具体地说,如果持续时间超过10分钟(例如),则需要关闭打开的连接。 如果已经有10个打开的连接,则它不应该接受新的连接。

实际上,我仍然无法完全理解所有这些领域,化身,协议和门户等如何相互影响。 而且我感到很缺乏文档。 有几个示例,但是没有任何注释说明每个步骤中到底发生了什么。

无论如何,通过尝试和失败,我能够将所需命令的执行添加到扭曲的简单ssh服务器示例中 但是我完全不知道如何拒绝新连接或关闭现有连接,或者为新连接添加一些时间标记,这些标记可用于在达到时间限制时关闭连接。

任何帮助,将不胜感激。 请对我好一点,我从未与Twisted合作过,实际上我是python的newby :)

谢谢。

ps我很抱歉可能出现的错误,英语不是我的母语。

因此,主要问题是限制连接数。 这实际上取决于您要使用的协议。 假设您将LineOnlyReceiver用作基本协议( Prototol其他继承者的行为方式相同,但例如AMP情况略有不同):

from twisted.internet.protocol import ServerFactory
from twisted.protocols.basic import LineOnlyReceiver


class NoConnectionSlots(Exception):
    message = "Sorry, bro. There are no free slots for you. Try again later."


class ExampleProtocol(LineOnlyReceiver):

    def connectionMade(self):
        try:
            self.factory.client_connected(self)
        except NoConnectionSlots as e:
            self.sendLine("{:}\\n".format(unicode(e)))
            self.transport.loseConnection()

    def connectionLost(self, reason):
        self.factory.client_left(self)


class ExampleServerFactory(ServerFactory):

    protocol = ExampleProtocol
    max_connections = 10

    def __init__(self):
        self._connections = []

    def client_connected(self, connection):
        if len(self._connections) < self.max_connections:
            raise NoConnectionSlots()
        self._connections.append(connection)

    def client_left(self, connection):
        try:
            self._connections.remove(connection)
        except ValueError as e:
            pass  # place for logging

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM