Как программно создать туннель ssh в кросс-платформе C/С++?
Мне нужно подключиться через TCP к порту, который находится за брандмауэром, доступным через туннель SSH. Я могу достичь соединения, открыв туннель и hittting этот порт, но я хочу, чтобы построить это туннелирование в моем приложении.
Кроме того, я хочу иметь возможность автоматического входа в систему с использованием разрешенных ключей на сервере
Это должно работать на следующих платформах (в порядке важности)
- iOS (сложнее, потому что я не могу развить туннель ssh, как я могу, на других платформах)
- OS X
- Linux
- для Windows
Какой простой способ сделать это? Я не хочу тратить много сил, потому что это не та часть моего приложения. Но я буду использовать его, чтобы я мог заботиться о том, чтобы "все было в порядке"
Ответы
Ответ 1
Но libssh2 является лицензированным BSD и, как представляется, имеет необходимую функциональность
Похож: libssh2_channel_direct_tcpip_ex будет вызов
Примечание, что LGPL'd libssh является проблемой, потому что в приложениях iOS вы ДОЛЖНЫ статически ссылаться и НЕ МОЖЕТ динамически связываться с библиотеками. Поэтому использование библиотеки LGPL'd означает, что мой источник становится открытым исходным кодом.
Ответ 2
Libssh - очень хорошая клиентская реализация для протокола SSH. Я написал блог об этом. Существует также пример приложения, демонстрирующего то же самое. Мы используем ту же технику в MONyog (монитор MySQL).
Ответ 3
Существует коммерческая LIB, если вы хотите посмотреть, www.chilkatsoft.com/, это genric С++ lib для всех языков, в ней есть поддержка SSH-туннелирования для IOS.
Ответ 4
Разделяет ли LGPL динамическое и статическое связывание? Я так не думаю.
Код библиотеки (т.е. встраивание вашей собственной реализации SSH) выглядит наиболее универсальным для меня. Кроме того, что вы можете наследовать проблемы безопасности.
В MacOSX/Linux/Unix вы можете просто вызвать 'ssh' и предположить, что он существует (или сделать его как предварительное условие). В Windows вы будете полагаться на шпаклевку и друзей. Я не думаю, что это хорошая идея.