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

Re: opening multiply reverse tunnels in one session


Hm, I think I got it. Is there an error in libssh-0.5.4 provided with
debian wheezy?

I've found this in channels.c global_request:

  switch(session->global_req_state){
    case SSH_CHANNEL_REQ_STATE_ACCEPTED:
      ssh_log(session, SSH_LOG_PROTOCOL, "Global request %s
success",request);
      rc=SSH_OK;
      break;
......................................
  }
  leave_function();
  return rc;

It seems, that after executing of global_request
session->global_req_state will not reseted to
SSH_CHANNEL_REQ_STATE_NONE; Does it mean that we would not be able to
execute global_request once again and that why I can execute
ssh_forward_listen only once?

In code from git we have:

  switch(session->global_req_state){
    case SSH_CHANNEL_REQ_STATE_ACCEPTED:
      SSH_LOG(SSH_LOG_PROTOCOL, "Global request %s success",request);
      rc=SSH_OK;
      break;
........................................
  }
  session->global_req_state = SSH_CHANNEL_REQ_STATE_NONE;

I'll try to open more as one reverse tunnel with ssh version from GIT.

Am 10.01.2014 12:37, schrieb Oleksandr Shneyder:
> Hello Andreas,
> 
> Am 10.01.2014 09:38, schrieb Andreas Schneider:
>> On Sunday 05 January 2014 19:04:01 Oleksandr Shneyder wrote:
>>> Hello,
>>>
>>> is it possible to open several reverse tunnels in one session? There is
>>> no problem with direct tunnel, I can simple create a channels with
>>> ssh_channel_new for every new tunnel that I need and then open
>>> forwarding with ssh_channel_open_forward.
>>
>> Sure, ssh_forward_accept() returns the opened channel. See the tutorial and 
>> the RFC which explains how it works.
>>
>> http://tools.ietf.org/html/rfc4254#section-7.1
>>
>>> In case of reverse tunnel it seems that I only can listen to one port.
>>> There is an example on
>>> http://api.libssh.org/master/libssh_tutor_forwarding.html how to create
>>> reverse tunnel and forward the port 8080. But what if I need to forward
>>> more services in one ssh session?
>>
>> Then request more ports on that session ... :)
> 
> This is the point, how can I request more than one port on session?
> I requesting a port with:
> ssh_forward_listen, for example to listen on port 9080:
> 
> rc = ssh_forward_listen(session, 0l, 9080, &bound_port)
> that works, I can accept incoming connections with ssh_forward_accept()
> 
> but now I need to listen one more port (9090) so I trying to call
> ssh_forward_listen again to request other port:
> 
> rc = ssh_forward_listen(session, 0l, 9080, &bound_port)
> and it fail with error "Invalid state in start of global_request()",
> because function global_request in channels.c need ssh_session to be in
> state SSH_CHANNEL_REQ_STATE_NONE but sessions state is different after
> first call of ssh_forward_listen
> 
> So it seems, that I can call ssh_forward_listen only once and request
> only one port on a session, or there are other methods to request ports
> on sessions?
> 
> And even if it would be possible to call ssh_forward_listen more than
> once, for example:
> 
> rc = ssh_forward_listen(session, 0l, 9080, &bound_port);
> rc = ssh_forward_listen(session, 0l, 9090, &bound_port);
> and then accept incoming connections with
> channel=ssh_forward_accept();
> how can I know if new connection is on port 9080 or 9090 ?
> 
> In libssh2 for example, I can create "listeners" for each port:
> 
> LIBSSH2_LISTENER
> *listener_9080=libssh2_channel_forward_listen(session,9080);
> 
> LIBSSH2_LISTENER
> *listener_9090=libssh2_channel_forward_listen(session,9090);
> 
> and after that accept connections on each listener:
> 
> channel_9080 = libssh2_channel_forward_accept(listener_9080);
> channel_9090 = libssh2_channel_forward_accept(listener_9090);
> 
> But with libssh I steel can not forward more as one port...
> 
>>>
>>> It seems to be possible open several reverse tunnels in one session with
>>> libssh2. But my project already uses libssh long time and I don't want
>>> to switch to libssh2. So I wondering if I can make the same with libssh.
>>
>>
>> See above :)
>>
> 
> regards
> 


-- 
----------------------------------------------------
Oleksandr Shneyder  | Email: o.shneyder@xxxxxxxxxxxxx
phoca GmbH          | Tel. : 0911 - 14870374 0
Bräuhausgasse 9     | Fax. : 0911 - 14870374 9
D-82205 Gilching    | Mobil: 0163 - 49 64 461

Geschäftsführung:
Dipl.-Inf. Oleksandr Shneyder

Amtsgericht München | http://www.phoca-gmbh.de
HRB 196 658         | http://www.x2go.org
USt-IdNr.: DE281977973
----------------------------------------------------

Attachment: signature.asc
Description: OpenPGP digital signature


Follow-Ups:
Re: opening multiply reverse tunnels in one sessionAndreas Schneider <asn@xxxxxxxxxxxxxx>
References:
opening multiply reverse tunnels in one sessionOleksandr Shneyder <o.shneyder@xxxxxxxxxxxxx>
Re: opening multiply reverse tunnels in one sessionAndreas Schneider <asn@xxxxxxxxxxxxxx>
Re: opening multiply reverse tunnels in one sessionOleksandr Shneyder <o.shneyder@xxxxxxxxxxxxx>
Archive administrator: postmaster@lists.cynapses.org