下面是一个简单的扭曲应用程序:
from twisted.cred import checkers, portal
from twisted.conch import manhole, manhole_ssh
from twisted.conch.insults import insults
from twisted.application import service, internet
from twisted.internet import endpoints, reactor
def makeManholeService(namespace):
checker = checkers.InMemoryUsernamePasswordDatabaseDontUse(
username="password")
realm = manhole_ssh.TerminalRealm()
realm.chainedProtocolFactory = lambda: insults.ServerProtocol(
manhole.ColoredManhole, namespace)
prt = portal.Portal(realm, [checker])
factory = manhole_ssh.ConchFactory(prt)
endp = endpoints.serverFromString(reactor, 'tcp:6022')
manholeService = internet.StreamServerEndpointService(endp, factory)
return manholeService
application = service.Application("my app")
manholeService = makeManholeService({'foo': 'bar'})
manholeService.setServiceParent(application)我们可以通过ssh连接到它:
$ ssh username@localhost -p 6022
username@localhost's password:
>>> foo
'bar'
>>>现在,我想替换InMemoryUsernamePasswordDatabaseDontUse,这样服务器就可以对使用rsa/dsa密钥标识自己的用户进行身份验证。
我必须实现一个检查程序吗?
例如,我在~/.ssh/authorized_keys中列出了一些公钥。SSH服务器应拒绝所有连接,但可以使用该文件中的公钥验证的连接除外。
发布于 2014-07-26 20:27:49
是的,你需要做个检查。但有些积木可以在海螺内使用,这应该会使它变得非常容易。英丽有一个例子项目,"ess“("SSH”,没有"SH"),您可能会对此感兴趣。
https://stackoverflow.com/questions/24956263
复制相似问题