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

Re: Need help.


Hi,

I think you will have to program with sockets yourself, that means, you
need to:

1. call socket(),bind(),listen(),etc
2. once connection comes in then call channel_open_forward to get a
ssh_channel
3. running a separated thread (or use select/ssh_select) to transfer
data from the socket to the channel back and fourth.

I have both experience with libssh and libssh2 and basically libssh2
works in exactly the same way.

I don't think a library can do so much things for you, it's your duty to
do the actual tunnelling :)

Vic

On Sun, 2009-09-13 at 13:27 +0400, Taras Halturin wrote:
> thanx for the answer!
> 
> 
> It is a pity :(. so,if i can't develop second half of the port
> forwarding routines, i'll try to use libssh2. maybe there will be easy
> to develop this feature for me.
> 
> 
> WBR
> 
> 
> Taras Halturin.
> 
> On Sun, Sep 13, 2009 at 1:14 PM, Aris Adamantiadis <aris@xxxxxxxxxxxx>
> wrote:
>         Hello Taras,
>         
>         I am sorry the documentation let you think it would be so
>         easy... In fact channel_open_forward only does half the work,
>         this is connecting to a remote host:port from the ssh server
>         and stream it into a channel. However the port binding and the
>         select loop (to verify if data is arriving and dispatching it)
>         is unfortunately up to you.
>         
>         Looking at the select_loop in sample.c would be a good
>         start-up for you, even if we should consider writing a working
>         example in the examples directory. The functionnality you
>         expected may be available in the 0.5 release.
>         
>         Andreas, Maybe we should make clear into the documentation
>         about what I just stated above. I also only see online
>         documentation for the 0.4.0 branch when the stable branch is
>         still 0.3.x. Could you have a look ?
>         Regards,
>         
>         Aris
>         
>         Taras Halturin a écrit :
>         
>         
>                 Hi all!
>                 
>                 i'm trying to use libssh for the port forwarding and
>                 it doesnt work for me :(. I need to forward remote
>                 port to the local host like this:
>                 ssh -L 22222:localhost:8222 fantom@xxxxxxxxxxxxx
>                 
>                 here is the code:
>                 
>                    static gboolean
>                    do_open_channel (gchar *username, gchar *password,
>                 gchar *remote,
>                                     guint remote_port, guint
>                 local_port)
>                    {
>                     SSH_SESSION *ssh = ssh_new();
>                     SSH_OPTIONS *opts = ssh_options_new();
>                     CHANNEL *ch = NULL;
>                 
>                     ssh_options_set_port (opts, 22);
>                     ssh_options_set_host (opts, remote);
>                    ssh_set_options (ssh, opts);
>                 
>                    if (ssh_connect(ssh) != SSH_OK)
>                    {
>                    g_warning ("Error at connection :%s
>                 \n",ssh_get_error (ssh));
>                    return FALSE;
>                    }
>                 
>                    ssh_is_server_known(ssh);
>                 
>                    if (ssh_userauth_autopubkey(ssh) !=
>                 SSH_AUTH_SUCCESS)
>                    {
>                    g_warning ("Authenticating with pubkey: %s
>                 \n",ssh_get_error(ssh));
>                    if (ssh_userauth_password (ssh, username,
>                 password) != SSH_AUTH_SUCCESS)
>                    {
>                    g_warning ("Authentication with password failed: %s
>                 \n",ssh_get_error
>                    (ssh));
>                    return FALSE;
>                    }
>                    }
>                 
>                    ch = channel_new (ssh);
>                 
>                    if (channel_open_forward (ch, remote, remote_port,
>                 "127.0.0.1",
>                    local_port) != SSH_OK)
>                    {
>                    g_warning ("Error when opening forward:%s\n",
>                 ssh_get_error (ssh));
>                    return FALSE;
>                    }
>                 
>                    g_debug ("Chanel is forwarded");
>                 
>                    return TRUE;
>                    //channel_close(channel);
>                    //channel_free(channel);
>                    //ssh_disconnect(ssh);
>                    }
>                 
>                 
>                 i'm calling this func with args:
>                 
>                 do_open_channel ("fantom","megapass", "myremote.host",
>                 8222, 22222);
>                 
>                 No errors happend, "Chanel is forwarded" has printed,
>                 but i can't see the listener on the 22222 port. What
>                 is wrong? Could somebody help me?
>                 
>                 WBR
>                 
>                 Taras Halturin.
>         
>         
> 
> 



Follow-Ups:
Re: Need help.Taras Halturin <halturin@xxxxxxxxx>
Re: Need help.Vic Lee <llyzs@xxxxxxx>
References:
Need help.Taras Halturin <halturin@xxxxxxxxx>
Re: Need help.Aris Adamantiadis <aris@xxxxxxxxxxxx>
Re: Need help.Taras Halturin <halturin@xxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org