[Twisted-Python] Simple ssh problem, please help

Kevin Ting gwkin1989 at gmail.com
Thu May 24 10:52:25 MDT 2012

Hi everyone, I am a beginner to Twisted so any help would be appreciated.

I got an example code from the Twisted, Networking Programming Essentials

from twisted.conch import error
from twisted.conch.ssh import transport, connection, keys, userauth,
channel, common
from twisted.internet import defer, protocol, reactor

class ClientCommandTransport(transport.SSHClientTransport):
    def __init__(self, username, password, command):
        self.username = username
        self.password = password
        self.command = command
        print "Transport Created"

    def verifyHostKey(self, pubKey, fingerprint):
        print "In Verify Host Key"
        return defer.succeed(True)

    def connectionSecure(self):
        print "In Connection Secure"
        temp = PasswordAuth(self.username, self.password,
        print "Created Everything"
        print "Double Check"

class PasswordAuth(userauth.SSHUserAuthClient):
    def __init__(self, user, password, connection):
        userauth.SSHUserAuthClient.__init__(self, user, connection)
        self.password = password
        print "init password auth"

    def getPassword(self, prompt=None):
        print "In getPassword"
        return defer.succeed(self.password)

class ClientConnection(connection.SSHConnection):
    def __init__(self, cmd, *args, **kwargs):
        print "Init Client Connection"
        print "Next line of Client Connection"
        self.command = cmd

    def serviceStarted(self):
        print "Service Started"
        self.openChannel(CommandChannel(self.command, conn=self))

class CommandChannel(channel.SSHChannel):
    name = 'session'

    def __init__(self, command, *args, **kwargs):
        channel.SSHChannel.__init__(self, *args, **kwargs)
        self.command = command

    def channelOpen(self, data):
        print ("Channel was opened")
= True).addCallback(self._gotResponse)

    def _gotResponse(self,_):

    def dataReceived(self, data):
        print data

    def closed(self):
        print("###### Entered Closed #####")
        print("##### Done with Closed ####")

class ClientCommandFactory(protocol.ClientFactory):
    def __init__(self, username, password, command):
        self.username = username
        self.password = password
        self.command = command

    def buildProtocol(self,addr):
        protocol = ClientCommandTransport(
            self.username, self.password, self.command)
        return protocol

if __name__ == "__main__":
    import sys, getpass
    server = sys.argv[1]
    command = sys.argv[2]
    username = raw_input("Username: ")
    password = getpass.getpass("Password: ")
    factory = ClientCommandFactory(username, password, command)
    reactor.connectTCP(server, 22, factory)


But after running this, I get this Unhandled error.  Which is strange
because the reactor is being successfully stopped.  Does anyone have any
clue what this means and how I should go about fixing it?  Thanks!!!!!

Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/twisted/internet/posixbase.py",
line 586, in _doReadOrWrite
    why = selectable.doRead()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line
199, in doRead
    rval = self.protocol.dataReceived(data)
  File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/transport.py",
line 438, in dataReceived
    self.dispatchMessage(messageNum, packet[1:])
  File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/transport.py",
line 460, in dispatchMessage
    messageNum, payload)
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 84,
in callWithLogger
    return callWithContext({"system": lp}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 69,
in callWithContext
    return context.call({ILogContext: newCtx}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line
118, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line
81, in callWithContext
    return func(*args,**kw)
  File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/service.py",
line 44, in packetReceived
    return f(packet)
  File "/usr/lib/python2.7/dist-packages/twisted/conch/ssh/connection.py",
line 314, in ssh_CHANNEL_REQUEST
    channel = self.channels[localChannel]
exceptions.KeyError: 0
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20120524/6387c8f8/attachment.html>

More information about the Twisted-Python mailing list