1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
2
# See LICENSE for details.
6
Accesses the key agent for user authentication.
8
This module is unstable.
10
Maintainer: U{Paul Swartz<mailto:z3p@twistedmatrix.com>}
13
from twisted.conch.ssh import agent, channel
14
from twisted.internet import protocol
15
from twisted.python import log
17
class SSHAgentClient(agent.SSHAgentClient):
20
agent.SSHAgentClient.__init__(self)
23
def getPublicKeys(self):
24
return self.requestIdentities().addCallback(self._cbPublicKeys)
26
def _cbPublicKeys(self, blobcomm):
27
log.msg('got %i public keys' % len(blobcomm))
28
self.blobs = [x[0] for x in blobcomm]
30
def getPublicKey(self):
32
return self.blobs.pop(0)
35
class SSHAgentForwardingChannel(channel.SSHChannel):
37
def channelOpen(self, specificData):
38
cc = protocol.ClientCreator(reactor, SSHAgentForwardingLocal)
39
d = cc.connectUNIX(os.environ['SSH_AUTH_SOCK'])
40
d.addCallback(self._cbGotLocal)
41
d.addErrback(lambda x:self.loseConnection())
44
def _cbGotLocal(self, local):
46
self.dataReceived = self.local.transport.write
47
self.local.dataReceived = self.write
49
def dataReceived(self, data):
54
self.local.loseConnection()
57
class SSHAgentForwardingLocal(protocol.Protocol): pass