from simpleconch import SimpleTransport
from twisted.internet import defer, reactor, protocol
def _bad(f):
print f
def _connected(i):
print i.getHostKey()
d = i.authPublicKey('z3p', file('/home/z3p/.ssh/id_rsa').read())
# d = i.authPassword('z3p', 'notmypassword')
d.addCallback(_password,i)
d.addErrback(_bad)
def _password(r,i):
assert i.isAuthenticated()
d = i.openSession()
d.addCallback(_session)
d.addErrback(_bad)
def _session(s):
c = CrazyProtocol()
s.setClient(c)
s.openExec('echo hello world!')
class CrazyProtocol(protocol.ProcessProtocol):
buf = ''
def outReceived(self, data):
self.buf += data
def processEnded(self, reason):
assert reason.value.exitCode == 0, reason.value.exitCode
assert self.buf == 'hello world!\n'
reactor.stop()
d = defer.Deferred()
protocol.ClientCreator(reactor, SimpleTransport, d).connectTCP('localhost', 22)
d.addCallback(_connected)
d.addErrback(_bad)
reactor.run()
syntax highlighted by Code2HTML, v. 0.9.1