Re: help with simple ssh shell server
- Subject: Re: help with simple ssh shell server
- From: Mike Jones <mrjones@xxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Thu, 07 Aug 2014 21:44:01 -0500
- To: libssh@xxxxxxxxxx
I did something similar and found this to work well enough.
buf is the character that was entered.
c is the number of characters collected so far on the current input line.
cmd is where it accumulates what has been typed so far.
What it does depends on whether the cursor is currently at the beginning
of a line or there is already some text entered.
Either way, sending '\b' will just move the cursor. So to get rid of a
character, you back up one character, then replace it with a literal
space and then back up again so the next character entered will be where
you expect it.
if ( (buf == 0x7f || buf == CTRL('H')) )
if ( c > 0 )
cmd[--c] = 0;
// back up, space over the character, then back up again
ssh_channel_write(channel, "\b \b", 3);
// clear any visible character
// there is a prompt shown, so we don't allow backing up
any farther than that
ssh_channel_write(channel, " \b", 2); // fix the client side
On 8/7/2014 1:41 PM, Barbe, Charles wrote:
> I am attempting to implement a very simple ssh shell server for use on an embedded platform that has a custom shell. I am able to successfully establish the connection, take in commands and spit out the results. My question though is how does one handle echoing command inputs correctly, particularly with respect to the backspace key.
> Currently, my echoing is just going through my normal stdout - with a "printf("%c", character) as each character is received - which is being written out to the ssh channel. But this does not seem to work with things like the backspace key.
> Am i missing something?
> Thanks for any help you can provide!
> Charles A. Barbe
> Senior Software Engineer
> Allworx, a Windstream company
> 245 East Main St | Rochester NY | 14604
> Charles.Barbe@xxxxxxxxxxx | 585.421.5565
Archive administrator: email@example.com