【问题标题】:How to start SSH on a chroot Linux如何在 chroot Linux 上启动 SSH
【发布时间】:2013-09-03 19:21:35
【问题描述】:

我设法通过终端在我的 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 应用程序。

【问题讨论】:

    标签: android linux ssh chroot


    【解决方案1】:

    如果你执行

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

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

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

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

    要运行它,您需要使用-c 选项直接将命令传递给su。您需要将命令作为字符串数组传递(或使用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"});
    

    【讨论】:

    • 好点!我修改了bt 脚本以直接使用命令参数。但是,当我通过Runtime.getRuntime().exec() 进行操作时,它似乎不起作用,因为我无法通过 SSH 连接到它。附带说明一下,当我使用编辑后的脚本手动执行此操作时,它运行良好。如何从 Android 应用的角度解决此问题?
    • 您确定可以在 PATH 上找到您的脚本吗?您可能想使用完整路径。
    • 在脚本中它是busybox chroot $mnt /bin/bash /etc/init.d/ssh start,而在 Android 应用上它与您指定的完全一样。
    • 他们在我相信的道路上。我从终端访问它们而无需执行cd。但我会尝试完整路径选项。
    • 尝试将参数作为数组传递,我已经更新了我的答案。您可能想阅读返回的进程的错误/输入流,看看是否有一些错误消息。
    【解决方案2】:

    除非你真的想这样做,否则老实说,我只是下载一个 SSH 服务器应用程序。

    我个人使用 SSHDroid

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

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

    祝你好运。

    【讨论】:

    • 他正在尝试使用 chroot 在另一个 linux 安装中运行 ssh 服务器。这与在 android 上运行 ssh 服务器完全不同。
    • 我的想法是,我想创建一个用于启动 Linux 的类和另一个通过 SSH 控制它的类……所有这些都以自主方式进行。所以 SSHDroid 不是一个解决方案,因为它需要用户干预。很抱歉一开始没有具体解释这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2015-10-20
    • 2021-02-28
    相关资源
    最近更新 更多