〖Android〗快速部署SSHD和Bash Shell(程序:DroidSSHD和BetterTerminalEmulatorPro)


 

~~此文僅做個人配置記錄~~

 

因為我經常需要sshd來連接設備,它抓取logcat日志太方便了,方便排查問題,及多人共享

及有USB孔限制的人來說,這個更具有意義;

 

把超級終端增強包部署到內網,也是為了方便下載,畢竟不是什么時候都可以上外網,並且外網下載太慢了;

增強包的配置相對比較麻煩一些,還需要配置bind9域名解析服務器,nginx或apach2網頁服務器;

不過這些對於一般開發者來說,搭建這些玩意的服務器都不算個事;

 

此外,ssh並不同於adb shell,一些環境變量也沒有;

如果這個時候,直接運行pm或am命令,則會直接導致Android設備重啟

當然,這也不是沒有辦法,后邊提供的sshcmd即可解決這個小問題;

 

文件下載:

  1. DroidSSHdv06.apk 下載1(google) 下載2(國內)

  2. BetterTerminalEmulatorPro.apk(超級終端) 下載1(google) 下載2(國內)

  3. [可選] 超級終端 增強包 bettertermpro_web.zip 下載1

 

安裝應用:

  1. 安裝應用 DroidSSHD 和 超級終端

  2. [可選] 解壓 bettertermpro_web.zip 到 nginx 或 apache2 搭建的網頁服務器根目錄(直接外網條件下載太慢了,假定此機器是hostA

  3. [可選] 手機接入的WiFi,DNS解析服務器設置(前提是有內網域名解析服務)把 magicandroidapps.com 指向 hostA

 

 

打開SSHD:

  運行DroidSSHD,選擇以Root權限運行,假定端口號設定3322,勾選 Start on boot,然后勾選Start

 

ssh_config配置:

  vi ~/.ssh/config

  輸入配置信息,如我的小米2手機是么配置的:

Host xiaomi
    HostName 55.55.137.149
    Port 3322
    User root

 

無密碼登錄:

  ssh-copy-id xiaomi

  因為$HOME變量被 DroidSSHD 指定到了 /sdcard,於是還需要登錄 xiaomi 這個設備,執行一些操作

  ssh xiaomi 登錄之后,執行以下命令: 

busybox=/data/data/com.magicandroidapps.bettertermpro/bin/busybox.exe
$busybox cp /sdcard/.ssh/authorized_keys /data/data/br.com.bott.droidsshd/files/etc/authorized_keys
uid_ssh=$($busybox ls -l /data/data/br.com.bott.droidsshd/files | $busybox awk '{print $3}' | $busybox head -n1)
uid_num=$($busybox id $uid_ssh|$busybox awk -F'[=(]' '{print $2}')
$busybox chown $uid_num:$uid_num /data/data/br.com.bott.droidsshd/files/etc/authorized_keys
unset uid_ssh
unset uid_num
$busybox mount -o remount,rw /system
$busybox cp /data/data/com.magicandroidapps.bettertermpro/bin/scp /system/xbin/scp
$busybox cp /data/data/com.magicandroidapps.bettertermpro/bin/sftp-server /data/data/br.com.bott.droidsshd/files/bin/
unset busybox

 

  復制scp和sftp-server是為了讓DroidSSHD支持 sshfs 掛載,方便文件的操作

 

sshcmd:

  讓ssh命令完全代替adb shell命令

#!/bin/bash
# 用於摸擬adb shell操作,穩定性比較adb shell好多了!

# self: get location
self=$(readlink -f $0)
self_dir=$(dirname $self)

DEVICE=${DEVICE:-'xiaomi'}
busybox=/data/data/com.magicandroidapps.bettertermpro/bin/busybox.exe

# run command
ssh -F $emmdevices $DEVICE \
    $busybox env \
    LOCAL_ENV_CURR_MODEM=/dev/block/platform/msm_sdcc.1/by-name/modem1 \
    LOOP_MOUNTPOINT=/mnt/obb \
    LD_LIBRARY_PATH=/vendor/lib:/system/lib \
    BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework_ext.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/qcom.fmradio.jar \
    PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin \
    LOCAL_ENV_CURR_SYSTEM=/dev/block/platform/msm_sdcc.1/by-name/system1 \
    MKSH=/system/bin/sh \
    ANDROID_DATA=/data \
    ANDROID_ROOT=/system \
    HOSTNAME=android \
    SHELL=/system/bin/sh \
    ANDROID_PROPERTY_WORKSPACE=8,65536 \
    EXTERNAL_STORAGE=/storage/sdcard0 \
    ANDROID_ASSETS=/system/app \
    TERM=vt100 \
    ASEC_MOUNTPOINT=/mnt/asec \
    HOME=/data \
    ANDROID_BOOTLOGO=1 \
    "$@"

  這樣子,使用類似命令 env DEVICE=xiaomi ./sshcmd am start -n com.easyapp.injecta/com.fake.activity.fakeUtil 即可通過命令行啟動一個應用程序

 

sshpidcat:

  當然,你也期望抓取logcat時,指定個應用程序對嗎?

  或許大家期望的抓取日志是這樣子的: logcat <package_name> 指定只抓取自己相關的日志輸出

  沒錯,使用pidcat即可完成,下載1(github)

  但是這個也是依賴於USB連接的,通過簡單的修改,使之能夠通過ssh來抓取指定apk的日志輸出(依賴於之前的sshcmd)

  因為文件較大,直接給出文件下載:

  sshpidcat.zip (包含sshcmd和sshpidcat兩個文件) 下載1

  這樣子使用類似命令 env DEVICE=xiaomi ./sshpidcat com.easyapp.injecta 即可只抓取 com.easyapp.injecta 的輸出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM