Subject: Re: [libssh2] (no subject)

Re: [libssh2] (no subject)

From: Mark Erikson <>
Date: Sun, 09 Sep 2007 13:13:37 +0800

> From: "Paul Thomas" <>
> Subject: [libssh2] Interacting with a shell how?
> So I've been reading through the docs and I've got a working example that
> can get to the point where it can open up a shell on a pty, but after that
> suceeds what do I do now?
> The guides all say
> /* At this point the shell can be interacted with using
> * libssh2_channel_read()
> * libssh2_channel_read_stderr()
> * libssh2_channel_write()
> * libssh2_channel_write_stderr()
> Thats nice, but I expected that after I requested a shell that there would
> be some data on the socket ready to be read that contained something like:
> paul_at_computerName ~ $
> What am I missing here? I've been unable to find much help online in the
> form of docs talking about ssh with the exception of the RFCs and these talk
> about the protocol, not what do do when its already connected.
> Help? Advice?
> Paul

I've also been working on a project which uses libssh2 to create a
shell. I don't have a good, simple example to give you, since it's a
GUI program that contains code adapted from several different sources,
and things are ugly right now. But, let me see if I can give an
overview of how I've got things working.

I have an SSHConnection class that encapsulates the socket IO. Whenever
the socket reports that there's input available, I call
SSHConnection->Read(void * buffer, uint nbytes). Read() does some
calculations to figure out exactly how much to read from the channel,
does a libssh2_poll() to confirm that it's ready to read, then creates a
new char[] buffer and calls libssh2_channel_read(channel, buffer,
actualNBytes). From there, you should be able to do whatever you want
with the data.

Writing's pretty simple. Whenever the user types, I call
SSHConnection->Write(char* data, int len), which passes it on to
libssh2_channel_write(channel, data, len).

My project is still pretty much a throwaway test with a lot of glitches,
so I don't claim to have this perfected. Still, hopefully that will
give you a bit of an idea where to head.

Mark Erikson

This email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
libssh2-devel mailing list
Received on 2007-09-09