I've solved Issue (3), by freeing the session, and creating a new one...
- the docs say you shouldn't need to do this.
Thoughts about (1) & (2) ?
On 8 Aug 2012, at 19:30, drbob wrote:
>
> Dear libssh developers.
>
> Thanks for this great library...
> Only took me an hour or so, to get an SSH server embedded into our Software.
>
> I'm a developer for Retroshare (http://retroshare.sourceforge.net), and we
> are planning to use libssh to provide
> a remote terminal interface so people can run RS on routers, and
> Raspberry-PI's, etc, and access from anywhere.
>
> Would like to ask a few questions:
>
> 1) SSH server private key. At the moment, I'm using a rsa_host_key file
> which is registered using
> ssh_bind_options_set(..., SSH_BIND_OPTIONS_RSAKEY, ...)
>
> Can we load the private key from memory using a EVP_PKEY * structure (or
> similar)?
>
> 2) For this initial code, I've just adapted your samplesshd.c code.
> -> open SSH_CHANNEL_SESSION.
> -> open a SHELL.
>
> This is great for our initial Terminal style application. In the future we
> plan to stream data over this link,
> and would like to create our own subsystem (or just explicitly name it, so it
> cannot be confused):
> -> open SSH_CHANNEL_SESSION.
> -> open a RS_DATA_LINK
>
> The Tutorial, says this is outside its scope (fair enough ;), but I can't
> find any other documentation.
> Is there an example of how to do somewhere?
> What is the best way to do this?
>
>
> 3) Using the samplesshd.c code, I can successfully connect once from an ssh
> client, but a second attempt hangs.
> I'm assuming this is because I haven't cleaned up libssh properly after the
> first connection:
>
> Real Code:
> http://retroshare.svn.sourceforge.net/viewvc/retroshare/branches/v0.5-gxs-b1/retroshare-nogui/src/ssh/rssshd.cc?revision=5396&view=markup
>
> Pseudo code:
> mBind = ssh_bind_new();
> mSession = ssh_new();
> ssh_bind_options_set( ....);
>
> while(1)
> {
> ssh_bind_listen(mBind);
> ssh_bind_accept(...);
> ssh_handle_key_exchange(...);
> ...
> authUser();
> setupChannel();
> setupShell();
>
> read/write
>
> ssh_disconnect(mSession);
> }
>
>
> Output for the Second Connection is:
>
> [3] Enabling POLLOUT for socket
> [3] ssh_handle_key_exchange: Actual state : 2
> [3] ssh_handle_key_exchange: Actual state : 2
> [3] Received banner: SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
> [1] SSH client banner: SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
> [1] Analyzing banner: SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu7
> [1] We are talking to an OpenSSH client version: 5.3 (50300)
> [3] Writing on the wire a packet having 339 bytes before
> [3] 339 bytes after comp + 8 padding bytes = 348 bytes packet
> [3] Enabling POLLOUT for socket
> [3] ssh_handle_key_exchange: Actual state : 4
> [3] ssh_handle_key_exchange: Actual state : 4
> [3] Packet size decrypted: 788 (0x314)
> [3] Read a 788 bytes packet
> [3] 8 bytes padding, 787 bytes left in buffer
> [3] After padding, 779 bytes left in buffer
> [3] Final size 779
> [3] Type 20
> [3] Dispatching handler for packet type 20
> [3] Set output algorithm aes128-ctr
> [3] Set input algorithm aes128-ctr
> [3] ssh_handle_key_exchange: Actual state : 6
> [3] Packet size decrypted: 140 (0x8c)
> [3] Read a 140 bytes packet
> [3] 6 bytes padding, 139 bytes left in buffer
> [3] After padding, 133 bytes left in buffer
> [3] Final size 133
> [3] Type 30
> [3] Dispatching handler for packet type 30
> [3] Received SSH_MSG_KEXDH_INIT
> [1] Invalid state for SSH_MSG_KEXDH_INIT <-------------- The Error ???
> [3] ssh_handle_key_exchange: Actual state : 6
> [3] ssh_handle_key_exchange: Actual state : 6
> [1] Socket exception callback: 1 (0) <-------------
> Ctrl-C on ssh client.
> [1] Error : Socket error: Success
> [3] ssh_handle_key_exchange: Actual state : 9
>
> Any clues?
> other info required?
>
>
> Thanks in advance.
> drBob.
>
>
>
>
>
>
>
>
>
>
>