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

Re: Creating a server


Hi Andreas,



Thanks for your answer! Please find my comments and further below.

On 4/13/22 07:30, Andreas Schneider wrote:
The ssh session is marked as connected after a successful key exchange.

Okay, that explains a lot of things, however, I still don't know why I get 'Socket error: disconnected' message. This suggests that even the socket is not connected.

Currently it is a connection from a client, but we don't know if it is a SSH
client yet. ssh_handle_key_exchange(session) is needed first to check if we
talk to a SSH client. But you should setup callbacks before you call
ssh_handle_key_exchange()

Yes, this is the failing call. I add the callbacks as follows:

    struct ssh_channel_callbacks_struct channel_cb = {
        .userdata = &cdata,
        .channel_pty_request_function = cli_pty_request,
//        .channel_pty_window_change_function = pty_resize,
        .channel_shell_request_function = cli_shell_request,
//        .channel_exec_request_function = exec_request,
//        .channel_data_function = data_function,
//        .channel_subsystem_request_function = subsystem_request
    };

    struct ssh_server_callbacks_struct server_cb = {
        .userdata = &sdata,
        .auth_password_function = cli_auth_password,
        .channel_open_request_session_function = cli_channel_open
    };

ssh_set_auth_methods(session, SSH_AUTH_METHOD_PASSWORD); /*we could support for key type authentication, but password is enough for now.*/


    ssh_callbacks_init(&server_cb);
    ssh_callbacks_init(&channel_cb);

    ret = ssh_set_server_callbacks(session, &server_cb);
    if (ret != SSH_OK) {
debug(hm->dbg, DEBUG_ERR, "%s(): CLI: Error setting server callbacks.\n", __func__);
        ret_val = ERR;
        goto exit_point;
    }



I don't know for sure if it is okay to have just the un-commented callbacks.

Patches to improve the documentation are welcome!:-)

I can contribute. Can you tell me which repository contains the documents, and how to submit PRs?

Did you look at examples/ssh_server.c? This is a simple ssh server
implementation. We recommend to implement a pre-forking server for security
reasons.


Yes, I'm following that example code.



BR,
Levente


--
Levente Kovacs
Senior Electronic Engineer

W: http://levente.logonex.eu

References:
Creating a serverLevente <leventelist@xxxxxxxxx>
Re: Creating a serverAndreas Schneider <asn@xxxxxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org