[Twisted-Python] Passing revieved rata and erroring out bad passowrds

Brian Levin b.levin at hvcc.edu
Tue Oct 28 08:42:49 MDT 2008


I apologizes if these are simple questions.  I am a complete newb when it comes to python and twisted.  I am trying to pass a command via ssh to a server.  I am having 2 problems.  I am hoping that someone can help me.  I have been unable to find answers in "the google".  

Problem 1: I am unable to pass the received data to a variable without creating a global.  As a general rule it is my understanding that the use of globals in python should be avoided.  If there is a better method for passing the data variable out of the dataReceived method I would prefer to use it.

Problem 2:  A bad password or username causes and infinite loop.  I need to find a way to cause an error or return a false value when the password or username is bad.

I have included my code below.  Any help would be most appreciated.  Thank you in advance

--Brian Levin

<code>

from twisted.conch.ssh import transport, userauth, connection, channel
from twisted.conch.ssh.common import NS
from twisted.internet import defer, protocol, reactor
from twisted.python import log
from getpass import getpass


class Transport(transport.SSHClientTransport):
    def verifyHostKey(self, hostKey, fingerprint):
        print 'host key fingerprint: %s' % fingerprint
        return defer.succeed(1)

    def connectionSecure(self):
        self.requestService(UserAuth(USER, Connection()))

class UserAuth(userauth.SSHUserAuthClient):
    def getPassword(self):
        return defer.succeed(getpass("password: "))
    def getPublicKey(self):
        return  # Empty implementation: always use password auth
class Connection(connection.SSHConnection):
    def serviceStarted(self):
        self.openChannel(Channel(2**16, 2**15, self))

class Channel(channel.SSHChannel):
	name = 'session'    # must use this exact string
	def openFailed(self, reason):
		print '"%s" failed: %s' % (CMD,reason)
	def channelOpen(self, data):
		self.welcome = data   # Might display/process welcome screen
		d = self.conn.sendRequest(self,'exec',NS(CMD),wantReply=1)
		
	def dataReceived(self, data):
		global test
		test = data

	def closed(self):
		self.loseConnection()
		reactor.stop()

USER = raw_input('User: ')
HOST = raw_input('Host: ')
CMD = raw_input('CMD: ')
protocol.ClientCreator(reactor, Transport).connectTCP(HOST, 22)
reactor.run()
print test

</code>




More information about the Twisted-Python mailing list