我用 Twisted Conch 编写了一个 SSH 服务器。但是遇到了一个棘手的问题。假设用户A和用户B通过ssh命令登录到twisted ssh服务器。然后用户A tail 或者 cat 服务器上的一个大文件(大于100M),会通过twisted ssh服务器造成大量echo,使得python ssh进程(twisted.conch)cpu使用率很高(大于95%) ,甚至100%),那么用户B就会被屏蔽,很长时间没有反应。当发现用户A通过twisted ssh服务器有大量回声并且不阻塞其他连接的用户时,有没有办法让用户A的会话(0.5秒)休眠。
import sys
import checkers
from twisted.python import components, log, logfile
from twisted.cred import portal
from twisted.internet import reactor
from twisted.conch.ssh import factory, keys, session, filetransfer
from twisted.conch.unix import UnixSSHRealm, SSHSessionForUnixConchUser, UnixConchUser
import keyvalue
if __name__ == "__main__":
sshFactory = factory.SSHFactory()
sshFactory.portal = portal.Portal(UnixSSHRealm())
sshFactory.portal.registerChecker(checkers.UsernamePasswordChecker())
sshFactory.publicKeys = {
'ssh-rsa': keys.Key.fromString(keyvalue.publicKey)}
sshFactory.privateKeys = {
'ssh-rsa': keys.Key.fromString(keyvalue.privateKey)}
components.registerAdapter(
SSHSessionForUnixConchUser, UnixConchUser, session.ISession)
log.startLogging(sys.stdout)
reactor.listenTCP(2222, sshFactory)
reactor.run()