使用密钥进行Twisted ssh服务器身份验证

时间:2014-07-25 12:53:53

标签: python twisted twisted.conch

这是一个简单的扭曲应用程序:

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服务器应拒绝所有连接,但可以使用该文件中的公钥验证的连接除外。

1 个答案:

答案 0 :(得分:3)

是的,你需要做一个检查器。但是在Conch中可以使用的构建块应该可以让它变得非常简单。李颖有一个示例项目," ess" (" SSH"没有" SH")implements some checkers您可能有兴趣查看。