Как запустить SSH в chroot Linux

Мне удалось запустить Linux на моем телефоне Android через терминал и даже запустить службу SSH и протестировать ее с помощью ConnectBot. Однако это ручная операция. Я больше думал об автоматизированном способе сделать это.

Я использовал этот механизм Linux: http://mitchtech.net/android-backtrack-chroot/

Я считаю, что моя основная проблема заключается в том, что я пытаюсь выполнить некоторые шаги до и после выполнения chroot, что, похоже, не работает в приложении для Android:

Runtime.getRuntime().exec("su");

//Mount the image
Runtime.getRuntime().exec("startbt");

//chroot into Linux
Runtime.getRuntime().exec("bt");

//From inside chroot, start the ssh service
Runtime.getRuntime().exec("/etc/init.d/ssh start");

Это тоже не сработало:

Runtime.getRuntime().exec("su & startbt & bt & /etc/init.d/ssh start");

Я снова предполагаю, что это проблема того, что интерпретируется как внутри или вне chroot. Моя главная цель в конечном итоге — запустить службу SSH автоматически, не обязательно через приложение для Android.


person Ahmed Farid    schedule 03.09.2013    source источник


Ответы (2)


Если вы выполните

Runtime.getRuntime().exec("su");

это просто запустит su, а затем выйдет. Следующий exec не будет выполняться с повышенными привилегиями. Точно так же после выполнения bt следующая команда не выполняется в среде chroot.

Я предполагаю, что bt это сценарий? Вы можете изменить его, чтобы передать аргументы в chroot, чтобы вы могли передать ему команду для выполнения, что-то вроде:

...
chroot new_root /etc/init.d/ssh start
...

Чтобы запустить это, вам нужно передать команду su напрямую, используя параметр -c. И вам нужно передать команды как массив строк (или использовать ProcessBuilder):

Runtime.getRuntime().exec(new String[] {"su", "-c", "startbt; bt"});

Другой вариант — заставить bt передавать аргументы из командной строки в chroot:

chroot new_root "$@"

а затем передать их в командной строке:

Runtime.getRuntime().exec(new String[] {"su", "-c", "startbt; bt /etc/init.d/ssh start"});
person mata    schedule 03.09.2013
comment
Хорошая точка зрения! Я изменил сценарий bt, чтобы напрямую использовать аргумент команды. Однако, когда я сделал это через Runtime.getRuntime().exec(), это не сработало, так как я не мог подключиться к нему через SSH. Кстати, когда я делал это вручную с отредактированным скриптом, все работало нормально. Как я могу устранить эту проблему с точки зрения приложения для Android? - person Ahmed Farid; 04.09.2013
comment
Вы уверены, что ваши скрипты можно найти в ПУТИ? вы можете использовать полный путь. - person mata; 04.09.2013
comment
В скрипте это busybox chroot $mnt /bin/bash /etc/init.d/ssh start, а в приложении для Android точно так, как вы указали. - person Ahmed Farid; 04.09.2013
comment
Они на пути, который я считаю. Я получаю к ним доступ из терминала, не выполняя cd. Но я попробую вариант полного пути. - person Ahmed Farid; 04.09.2013
comment
Попробуйте передать аргументы в виде массива, я обновил свой ответ. И вы можете прочитать поток ошибок/ввода возвращаемого процесса, чтобы увидеть, есть ли какое-то сообщение об ошибке. - person mata; 04.09.2013

Если вы действительно не хотите делать что-то таким образом, я бы, честно говоря, просто скачал приложение SSH-сервера.

Лично я использую SSHDroid.

https://play.google.com/store/apps/details?id=berserker.android.apps.sshdroid&hl=en

Но, судя по всему, вы создаете собственное приложение для самостоятельного запуска встроенного ssh-сервера? Итак, вы, вероятно, уже знаете, что уже можете сделать это с помощью приложения.

В любом случае удачи.

person Connor McBrine-Ellis    schedule 03.09.2013
comment
Он пытается запустить ssh-сервер внутри альтернативной установки Linux, используя chroot. Это нечто совершенно другое, чем просто запуск ssh-сервера на Android. - person mata; 04.09.2013
comment
Идея в том, что я хочу создать класс, в котором запускается Linux, и другой класс, чтобы управлять им через SSH... Все в автономном режиме. Таким образом, SSHDroid не является решением, поскольку требует вмешательства пользователя. Прошу прощения, что не объяснил это конкретно в начале! - person Ahmed Farid; 04.09.2013