Intereting Posts
OnConfigurationChange не вызывается после изменения языка Какова наилучшая практика для обмена моделями между сервером WEB API и клиентским приложением Android Android отправляет запрос https на сервер без устаревших методов Рассчитать уровень громкости от микрофона на Android Не удалось найти инструмент «aapt»! Возможно, вам придется обновить Android SDK, включая инструменты платформы Первая точка останова линии работает только Android: в чем разница между неглубокой и сохраненной кучей Обнаружение отключения от точки доступа WiFi Как избежать исчезновения следующего сигнала тревоги на экране блокировки? Как проверить, существует ли ключ json? Как использовать привязку данных и Kotlin в Android Studio 3.0.0 Не удается запустить контрольно-измерительные тесты после ввода данных Отправлять записанный звук в качестве входа микрофона Почему View метод dispatchKeyEvent не вызван? Слушатель событий в фоновом режиме Javascript переопределяет кнопку обратной связи устройства Android

Использование ConnectBot с намерениями

Есть ли способ получить доступ к функциям ConnectBot с помощью намерений? Я хочу запустить ssh-сеанс из своего приложения и пройти аутентификацию через Private / Public Key, а затем закрыть сеанс. Возможно ли это с помощью ConnectBot, и если да, то как я могу назвать намерения? К сожалению, я не нашел никакой документации по этой теме 🙁

Ответ на этот вопрос зависит от того, что вы хотите использовать для сеанса ssh: это что-то программное или вы хотите показать пользователю сеанс терминала или консоль, где они могут вводить произвольные команды? Этот второй вариант по большей части довольно легко поддерживается, как видно из изучения манифеста ConnectBot – приложение имеет фильтр намерений, зарегистрированный для ConsoleActivity который соответствует этому шаблону:

  • Action : 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

Crypto libs Bouncy Castle обычно используются в Java для предоставления алгоритмов шифрования, однако версия, снабженная Android, искалечена и не легко переопределяется – следовательно, вы должны использовать библиотеки Spongy Castle для удобной для Android перекомпоновки BC libs:

https://github.com/rtyley/spongycastle