[Twisted-Python] Conch channel blocked
exarkun at twistedmatrix.com
exarkun at twistedmatrix.com
Thu Feb 4 07:01:57 MST 2010
On 2 Feb, 09:24 pm, jbardin at bu.edu wrote:
>Hello,
>
>I'm trying to get a feel for twisted.conch, and not getting very far.
>I know the documentation is lacking, but I'm not here to complain, I'm
>here to figure this out. I only have a cursory knowledge of twisted so
>far, so that may be some of my problem. I am however fairly familiar
>with the internals of ssh, so I thought I could start there...
>
>I started with the sshsimpleclient example, took some pieces, and
>began experimenting.
>The example worked as expected.
>Next, I wanted to pipe arbitrary data over the channel, as if I called
>"ssh hostname 'cat > file'"
>This however fills the remote buffer, and hangs
>
>Here's a small example
>###############
>class ClientConnection(connection.SSHConnection):
> def serviceStarted(self):
> self.openChannel(CatChannel(conn = self))
>
>class CatChannel(channel.SSHChannel):
> name = 'session'
> def channelOpen(self, data):
> d = self.conn.sendRequest(self, 'exec', common.NS('cat >
>/tmp/testfile'),
> wantReply = 1)
> d.addCallback(self._cbSendRequest)
>
> def _cbSendRequest(self, ignored):
> f = open('testfile')
> chunk = f.read(4096)
> while chunk:
> self.write(chunk)
> chunk = f.read(4096)
> f.close()
> self.conn.sendEOF(self)
> self.loseConnection()
>################
>
>
>Also, setting the channel name to 'session', sending the 'exec'
>request with the command as a netstring, etc. seem like something that
>should be abstracted away. SSHSession with request_exec seemed like
>the obvious choice, but I had no success in using that class for
>anything.
I can't run your example code, since it's not a complete example. That
makes it harder to point out what's wrong with it. However, one thing
does strike me as wrong:
> while chunk:
> self.write(chunk)
> chunk = f.read(4096)
This is a pattern you typically want to avoid, in Conch or anything else
Twisted-based. I don't know if SSHChannel is a consumer, but if not it
should be, and you should be writing the file using a producer. See:
http://twistedmatrix.com/documents/current/core/howto/producers.html
>
>Does anyone know if any projects making good use of twisted.conch,
>where I can see the source in action, and in depth?
Mantissa uses Twisted Conch a bit:
http://divmod.org/trac/browser/trunk/Mantissa/xmantissa/terminal.py
But you won't find any code sending any exec requests there.
Jean-Paul
More information about the Twisted-Python
mailing list