2018年12月8日土曜日

落ちクマ

PC から WiFi 経由で Android のファイルブラウズをしたいのだけれど,
・日本語ファイル名が化けない
・外部サーバを介さず LAN 内で完結する
・SD カードを読み書きできる
・上記の機能がすべて無料で使える
を満たす Android アプリが,何故か無い.

なので Cyanogenmod, LineageOS では内蔵の sshd を立ち上げていた (PC からは WinSCP) のだが,今のところこれが最強.
しかし Redmi Note 3 Pro を AOSP 系の Pixel Experience にしたら sshd が入っていなかった.
Android アプリにも sshd はあるけど,root じゃないので SD カードアクセスができず使えない.

仕方がないので dropbear を Android 向けに build することにした.
GitHub を漁るといろいろ Android に移植済みの dropbear があるが,最も新しそうな dropbear-android を使用することにする.

【手順】
(1) Android NDK 環境をここ見ながら構築する.
自分は↓で行けた.
/home/yoshi/android-ndk-r16b/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/home/yoshi/android-toolchain
(2) dropbear-android のビルド
setenv TOOLCHAIN /home/yoshi/android-toolchain
./build-dropbear-android.sh
で,珍しく一発でビルドが通った.

で,RN3P に持っていって起動したら,
# /data/dropbear -r ./ssh/rsa_key_db -F -P ./ssh/pid -A -N root -T ./ssh/authorized_keys -U 0 -G 0
[23486] Dec 08 15:37:22 Not backgrounding
[23487] Dec 08 15:37:25 Child connection from 192.168.0.13:62545
[23487] Dec 08 15:37:27 Password auth succeeded for 'root' from 192.168.0.13:62545
[23487] Dec 08 15:37:27 Failed to open any /dev/pty?? devices
[23487] Dec 08 15:37:27 No pty was allocated, couldn't execute
[23487] Dec 08 15:37:27 Exit (root): Exited normally
んー,terminal の open に失敗してる? そもそも /dev/pty とか Android に無いんじゃないの?

調べてみると,Linux では openpty() で端末を open するのが一般的らしいが,Android に openpty() はない.しかし,ここで他の Android dropbear プロジェクトで,openpty() を独自実装しているものが見つかった.このコードをサクッとコピペして再ビルド.
[28075] Dec 08 21:54:33 Not backgrounding
[20372] Dec 08 22:03:01 Child connection from 192.168.0.13:55309
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Password null
[20372] Dec 08 22:03:01 Pubkey auth succeeded for 'root' with key sha1!! ... from 192.168.0.13:55309
勝利ヽ(´ー`)ノ

上記のパッチ当て済みのものを GitHub に公開したんで,欲しい人はどうど.

0 件のコメント:

コメントを投稿