¿Cómo crear un túnel ssh mediante programación en C/C++ multiplataforma?

3 minutos de lectura

Necesito conectarme a través de TCP a un puerto que está detrás de un firewall, accesible a través de un túnel SSH. Puedo lograr la conexión abriendo un túnel y accediendo a ese puerto, pero quiero construir este túnel en mi aplicación.

Además, quiero poder proporcionar un inicio de sesión automático mediante el uso de claves autorizadas en el servidor

Esto debe funcionar en las siguientes plataformas (en orden de importancia)

  • iOS (más complicado porque no puedo bifurcar un túnel ssh como puedo en otras plataformas)
  • sistema operativo X
  • linux
  • ventanas

¿Cuál es la manera fácil de hacer esto? Obviamente, no quiero gastar mucho esfuerzo, ya que esta no es la esencia de mi aplicación. Pero lo reutilizaré para que me importe lo suficiente como para “hacer las cosas bien”.

  • ¿Has consultado: stackoverflow.com/questions/992374/… ? Esto se parece bastante a un duplicado exacto…

    – Jerry Ataúd

    15 de febrero de 2011 a las 18:16

  • @Jerry Coffin: Bueno, Nektarios solicita un túnel SSH, mientras que el otro solo solicita una biblioteca SSH. 🙂

    – Teekin

    15 de febrero de 2011 a las 18:30

Avatar de usuario de Nektarios
Nectarios

Pero libssh2 tiene licencia BSD y parece tener la funcionalidad necesaria

Parece: libssh2_channel_direct_tcpip_ex será la llamada

Nota que LGPL’d libssh es un problema porque en las aplicaciones iOS DEBE vincular estáticamente y NO PUEDE vincular dinámicamente a las bibliotecas. Por lo tanto, usar una biblioteca LGPL significa que mi fuente se convierte en fuente abierta.

  • Si observa la comparación (probablemente sesgada) (libssh2.org/libssh2-vs-libssh.html), libssh2 podría ser una mejor opción.

    – sstn

    15 de febrero de 2011 a las 19:59

  • También estoy de acuerdo en que libssh2 incluso para no bloquear es lo mejor.

    – Nectarios

    15 de febrero de 2011 a las 21:22

  • El problema LGPL es correcto. Sin embargo, la página libssh2 vs libssh está desactualizada y es incorrecta. libssh tiene muchas más características que libssh2 como ECDSA, ECDH kex, GSSAPI, etc. libssh.org/features

    – asn

    19 de noviembre de 2013 a las 15:59

libre es una muy buena implementación de cliente para el protocolo SSH. he escrito un blog en este. También hay una aplicación de muestra que demuestra lo mismo. Usamos la misma técnica en MONYog (Monitor MySQL).

Hay una LIB comercial si quiere echarle un vistazo, www.chilkatsoft.com/, es una librería genérica de C++ para todos los idiomas, en ella hay soporte para túneles SSH para IOS.

¿La LGPL diferencia entre enlazar de forma dinámica y estática? No me parece.

El código de la biblioteca (es decir, incrustar su propia implementación de SSH) me parece más versátil. Excepto el hecho de que podrías heredar problemas de seguridad.

En MacOSX/Linux/Unix, simplemente puede invocar ‘ssh’ y asumir que existe (o hacerlo como condición previa). En Windows, confiaría en masilla y amigos. No creo que sea una buena idea.

¿Ha sido útil esta solución?