Wie erstelle ich programmgesteuert einen SSH-Tunnel in C/C++ plattformübergreifend?

Lesezeit: 3 Minuten

Ich muss über TCP eine Verbindung zu einem Port herstellen, der sich hinter einer Firewall befindet und über einen SSH-Tunnel zugänglich ist. Ich kann eine Verbindung herstellen, indem ich einen Tunnel öffne und diesen Port drücke, aber ich möchte diesen Tunnel in meine Anwendung einbauen.

Außerdem möchte ich in der Lage sein, eine automatische Anmeldung bereitzustellen, indem ich autorisierte Schlüssel auf dem Server habe

Dies muss auf den folgenden Plattformen funktionieren (in der Reihenfolge ihrer Wichtigkeit)

  • iOS (am schwierigsten, weil ich keinen SSH-Tunnel forken kann, wie ich es auf anderen Plattformen kann)
  • OSX
  • Linux
  • Windows

Was ist der einfache Weg, dies zu tun? Ich möchte natürlich nicht viel Aufwand betreiben, da dies nicht der Kern meiner Bewerbung ist. Aber ich werde es wiederverwenden, damit ich mich genug darum kümmere, “die Dinge richtig zu machen”

  • Haben Sie sich angesehen: stackoverflow.com/questions/992374/… ? Das sieht ziemlich nah an einem exakten Duplikat aus …

    – Jerry Sarg

    15. Februar 2011 um 18:16 Uhr

  • @Jerry Coffin: Nun, Nektarios fragt nach einem SSH-Tunnel, während der andere nur nach einer SSH-Bibliothek fragt. 🙂

    – Tekin

    15. Februar 2011 um 18:30 Uhr

Benutzeravatar von Nektarios
Nektarios

Aber libssh2 ist BSD-lizenziert und scheint die benötigte Funktionalität zu haben

Sieht aus wie: libssh2_channel_direct_tcpip_ex wird der Anruf sein

Notiz dass die libssh von LGPL ein Problem darstellt, da Sie bei iOS-Apps Bibliotheken statisch verknüpfen müssen und NICHT dynamisch verknüpfen können. Daher bedeutet die Verwendung einer LGPL-Bibliothek, dass meine Quelle Open Source wird.

  • Betrachtet man den (wahrscheinlich voreingenommenen) Vergleich (libssh2.org/libssh2-vs-libssh.html), könnte libssh2 die bessere Wahl sein.

    – stn

    15. Februar 2011 um 19:59 Uhr

  • Ich stimme auch zu, dass libssh2 auch für Nicht-Blockierung am besten ist.

    – Nektarios

    15. Februar 2011 um 21:22 Uhr

  • Das LGPL-Problem ist richtig. Die Seite libssh2 vs. libssh ist jedoch veraltet und daher falsch. libssh hat viel mehr Funktionen als libssh2 wie ECDSA, ECDH kex, GSSAPI usw. libssh.org/features

    – asn

    19. November 2013 um 15:59 Uhr

Libsch ist eine sehr gute Client-Implementierung für das SSH-Protokoll. ich habe geschrieben ein Blog darauf. Es gibt auch eine Beispielanwendung, die dasselbe demonstriert. Wir verwenden die gleiche Technik in MONyog (MySQL-Monitor).

Es gibt eine kommerzielle LIB, wenn Sie einen Blick darauf werfen möchten, www.chilkatsoft.com/, es ist eine generische C++-Bibliothek für alle Sprachen, darin gibt es eine Unterstützung für SSH-Tunneling für IOS.

Unterscheidet die LGPL zwischen dynamischem und statischem Linken? Ich glaube nicht.

Der Bibliothekscode (dh das Einbetten Ihrer eigenen SSH-Implementierung) sieht für mich am vielseitigsten aus. Außer der Tatsache, dass Sie möglicherweise Sicherheitsprobleme erben.

Unter MacOSX/Linux/Unix können Sie einfach ‘ssh’ aufrufen und davon ausgehen, dass es existiert (oder es zur Vorbedingung machen). Unter Windows würden Sie sich auf Putty und Co. verlassen. Ich denke nicht, dass das eine gute Idee ist.

1432260cookie-checkWie erstelle ich programmgesteuert einen SSH-Tunnel in C/C++ plattformübergreifend?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy