2011-02-15 95 views
16

我需要通過TCP連接到防火牆後面的端口,可以通過SSH隧道訪問。我可以通過打開隧道和連接端口來實現連接,但是我想要將這種隧道連接到我的應用程序中。如何以編程方式在C/C++跨平臺中創建ssh隧道?

此外,我希望能夠通過使用

這必須在以下平臺上工作(按重要性排序)

  • 的iOS提供一種在服務器上的授權密鑰的自動登錄(最棘手因爲像我可以在其他平臺上)
  • OS X我無法派生一個SSH隧道
  • Linux的
  • 的Windows

這樣做的簡單方法是什麼?我不想花費很大的努力,因爲這不是我申請的內容。但我會重新使用它,所以我可以照顧不夠「做正確的事情」

+0

你看過:http://stackoverflow.com/questions/992374/object-oriented-c-library-for-ssh-and-scp?這看起來非常接近一個完全相同的... – 2011-02-15 18:16:18

+2

@Jerry Coffin:好吧,Nektarios要求SSH隧道,而另一個只是要求提供SSH庫。 :) – Teekin 2011-02-15 18:30:16

回答

6

但libssh2是基於BSD授權的,似乎有功能所需

的樣子:libssh2_channel_direct_tcpip_ex將通話

注意 LGPL'd libssh是一個問題,因爲在iOS應用程序中,您必須靜態鏈接並且不能動態鏈接到庫。因此,使用LGPL'd庫意味着我的源代碼變成了開源代碼。

+0

如果你看看(可能是有偏見的)比較(http://www.libssh2.org/libssh2-vs-libssh.html),libssh2可能是更好的選擇。 – sstn 2011-02-15 19:59:32

-1

LGPL是否區分動態鏈接和靜態鏈接?我不這麼認爲。

庫代碼(即嵌入自己的SSH實現)看起來對我來說是最通用的。除了你可能繼承安全問題的事實。

在MacOSX/Linux/Unix上,您可以簡單地調用'ssh'並假定它存在(或將其作爲先決條件)。在Windows上,你將依靠膩子和朋友。我不認爲這是個好主意。

0

有一個商業的LIB,如果你想看看www.chilkatsoft.com/,它是所有語言的genric C++庫,它支持IOS的SSH隧道。

3

Libssh是SSH協議的一個很好的客戶端實現。我已經寫了a blog這個。還有一個示例應用程序展示了相同的內容。我們在MONyog(MySQL監視器)中使用相同的技術。