1

我设法通过终端在我的 Android 手机上启动了 Linux,甚至启动了 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 应用程序。

4

2 回答 2

1

如果你执行

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

这将启动su然后退出。下一个 exec 不会以提升的权限执行。同样,在执行bt下一个命令后,不会在 chroot 环境中执行。

我假设bt是一个脚本?您可以将其更改为将参数传递给chroot,因此您可以将要执行的命令传递给它,例如:

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

要运行它,您需要将命令传递给su直接使用该-c选项。您需要将命令作为字符串数组传递(或使用 a 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"});
于 2013-09-03T19:43:39.647 回答
0

除非您真的想以这种方式做事,否则老实说,我只是下载一个 SSH 服务器应用程序。

我个人使用SSHDroid

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

但是从您构建自己的应用程序以自己启动内置 ssh 服务器的外观来看?因此,您可能已经知道您已经可以使用应用程序来完成它。

反正祝你好运。

于 2013-09-03T20:53:41.103 回答