Как программно создать ssh-туннель в кроссплатформенном C / C ++? - PullRequest
16 голосов
/ 15 февраля 2011

Мне нужно подключиться через TCP к порту, который находится за брандмауэром, доступным через туннель SSH. Я могу установить соединение, открыв туннель и нажав этот порт, но я хочу встроить этот туннель в свое приложение.

Кроме того, я хочу иметь возможность автоматического входа в систему с использованием авторизованных ключей на сервере

Это должно работать на следующих платформах (в порядке важности)

  • iOS (самая хитрая, потому что я не могу развернуть ssh-туннель, как на других платформах)
  • OS X
  • Linux
  • Windows

Какой самый простой способ сделать это? Я не хочу тратить много усилий, очевидно, так как это не главное для моего приложения. Но я буду использовать его снова, так что я могу быть достаточно внимателен, чтобы "сделать все правильно"

Ответы [ 4 ]

6 голосов
/ 15 февраля 2011

Но libssh2 лицензирован BSD и, похоже, обладает необходимой функциональностью

Похоже: libssh2_channel_direct_tcpip_ex будет вызовом

Обратите внимание , что LGPL'd libssh является проблемой, потому что в приложениях iOS вы ДОЛЖНЫ статически связываться и НЕ МОЖЕТ динамически связываться с библиотеками. Поэтому использование библиотеки LGPL означает, что мой источник становится открытым.

3 голосов
/ 12 сентября 2012

Libssh - очень хорошая реализация клиента для протокола SSH. Я написал блог об этом. Существует также пример приложения, демонстрирующего то же самое. Мы используем ту же технику в MONyog (монитор MySQL).

0 голосов
/ 02 июня 2011

Существует коммерческая LIB, если вы хотите на нее посмотреть, www.chilkatsoft.com/, это общая библиотека C ++ для всех языков, в ней есть поддержка SSH-туннелирования для IOS.

0 голосов
/ 15 февраля 2011

Различает ли LGPL динамическое и статическое соединение?Я так не думаю.

Библиотечный код (т.е. встраивание вашей собственной реализации SSH) выглядит наиболее универсальным для меня.За исключением того факта, что вы можете унаследовать проблемы безопасности.

В MacOSX / Linux / Unix вы можете просто вызвать 'ssh' и предположить, что он существует (или сделать это в качестве предварительного условия).На Windows вы бы положились на шпатлевку и друзей.Я не думаю, что это хорошая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...