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してから終了します。次の実行は昇格された特権では実行されません。同様にbt、次のコマンドを実行した後、chroot 環境内では実行されません。

btスクリプトだと思いますか?に引数を渡すように変更chrootできるので、実行するコマンドを次のように渡すことができます。

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

これを実行するにはsu、オプションを使用して直接コマンドを渡す必要があり-cます。そして、コマンドを String 配列として渡す (または を使用する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 に答える