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
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.
14322600cookie-checkWie erstelle ich programmgesteuert einen SSH-Tunnel in C/C++ plattformübergreifend?yes
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