[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: help with simple ssh shell server

I did something similar and found this to work well enough.

buf[0] 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[0] == 0x7f || buf[0] == 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

Mike Jones

On 8/7/2014 1:41 PM, Barbe, Charles wrote:
> Hi,
> 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

RE: help with simple ssh shell server"Barbe, Charles" <Charles.Barbe@xxxxxxxxxxx>
help with simple ssh shell server"Barbe, Charles" <Charles.Barbe@xxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org