Ответ на этот вопрос зависит от того, для чего вы хотите использовать сессию ssh: это что-то программное, или хотите ли вы показать пользователю терминальную сессию или консоль, где они могут вводить произвольно команды? Этот второй вариант по большей части довольно легко поддерживается, как вы можете видеть из изучения манифеста ConnectBot - в приложении зарегистрирован фильтр намерений для ConsoleActivity
, который соответствует этому шаблону:
- действие :
android.intent.action.VIEW
- uri :
ssh://user@host:port/#nickname
... впоследствии он не закроет сеанс, но кроме этого он будет делать все, что вы указали, используя собственную инфраструктуру ConnectBot для соединения и используя любые ключи SSH, которые зарегистрировал пользователь в приложении ConnectBot.
В качестве альтернативы , вы, возможно, говорите о первом варианте: для вашего приложения для выполнения какой-то определенной команды на SSH-сервере программным способом .
В настоящее время это никак не поддерживается официальным выпуском ConnectBot. В зависимости от ваших требований, вы можете себе представить, что вы просто включите намерение ConnectBot с адресом сервера и командой, которую хотите, чтобы он выполнял; это не будет слишком сложно реализовать ConnectBot, и это избавит вас от головной боли, связанной с изучением протокола ssh. Однако это намерение не существует, и если оно сделало , это было бы очень опасно, любое приложение на телефоне могло бы использовать его для выполнения произвольного кода с учетными данными пользователей на удаленных серверах.
Что существует , так это намерение, которое я создал в исправленной версии ConnectBot несколько месяцев назад для поддержки Agit , клиента Git для Android:
org.openintents.ssh.BIND_SSH_AGENT_SERVICE
Эта исправленная версия ConnectBot позволяет ConnectBot действовать как ssh-agent - ваше приложение отвечает за управление ssh-соединением, но вы можете вызвать ConnectBot для получения необходимых учетных данных - ConnectBot позволит Вы знаете, какие открытые ключи доступны для подключения, и будете подписывать цифровые запросы, необходимые для аутентификации. подробности протокола находятся на OpenIntents.org , но в основном вы используете намерение связать с ConnectBot, получая интерфейс AIDL, который обеспечивает функциональность ssh-agent:
org.openintents.ssh.BIND_SSH_AGENT_SERVICE
В качестве меры безопасности вашему приложению нужно будет объявить, что оно использует это разрешение, или оно не сможет привязаться к сервису:
org.openintents.ssh.permission.ACCESS_SSH_AGENT
Исправленную версию ConnectBot можно скачать с Android Market здесь:
https://market.android.com/details?id=com.madgag.ssh.agent
Исходный код для патча находится здесь:
http://code.google.com/r/robertotyley-connectbot-ssh-agent/source/list?name=ssh-agent
Несмотря на то, что это берет на себя управление открытым / закрытым ключом, оно все равно оставляет вам необходимость реализовать соединение ssh в вашем приложении. Я бы порекомендовал библиотеку sshj для поддержки протокола ssh, см. Их пример простого «командного» соединения:
https://github.com/shikhar/sshj/blob/v0.6.1/src/main/java/examples/Exec.java
Криптолибы Bouncy Castle обычно используются в Java для предоставления алгоритмов шифрования, однако версия, поставляемая с Android, повреждена и не может быть легко переопределена - следовательно, вы должны использовать библиотеки Spongy Castle для удобной для Android перепаковки библиотек BC:
https://github.com/rtyley/spongycastle