~~此文仅做个人配置记录~~

因为我经常需要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
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 $)
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./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./by-name/system1 \
MKSH=/system/bin/sh \
ANDROID_DATA=/data \
ANDROID_ROOT=/system \
HOSTNAME=android \
SHELL=/system/bin/sh \
ANDROID_PROPERTY_WORKSPACE=, \
EXTERNAL_STORAGE=/storage/sdcard0 \
ANDROID_ASSETS=/system/app \
TERM=vt100 \
ASEC_MOUNTPOINT=/mnt/asec \
HOME=/data \
ANDROID_BOOTLOGO= \
"$@"

  这样子,使用类似命令 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 的输出

〖Android〗快速部署SSHD和Bash Shell(程序:DroidSSHD和BetterTerminalEmulatorPro)的更多相关文章

  1. 快速部署tomcat项目的Shell脚本

    为了做集群测试,在每台机器上装了3个tomcat,每次发布项目的时候都要反复敲一些命令,重启tomcat之前先检查tomcat进程有没有停掉,没有还要手动kill该进程. 发布次数多了,操作就比较繁琐 ...

  2. [转] 快速部署Tomcat项目的Shell脚本

    为了做集群测试,在每台机器上装了3个tomcat,每次发布项目的时候都要反复敲一些命令,重启tomcat之前先检查tomcat进程有没有停掉,没有还要手动kill该进程. 发布次数多了,操作就比较繁琐 ...

  3. shell脚本实现---Zabbix5.0快速部署

    shell脚本实现---Zabbix5.0快速部署 zabbix-server快速安装脚本 #!/bin/bash #Zabbix-Server 5.0#author:sunli#mail:sunli ...

  4. bash shell学习-实践 (自己实现一些小工具)

    The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux S ...

  5. 三 Bash Shell 结构

    Bash Shell 程序结构主要有 : 变量设定  内置命令 Shell 语法结构 函数 其他命令行程序构成 例子: [root@localhost ~]# vim test.sh #!/bin/b ...

  6. Ubuntu下修改缺省dash shell为bash shell

    Debian和Ubuntu下缺省使用的是shell是dash,而不是bash.从/bin/sh软连接的指向可以看出这点. 这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它 ...

  7. Linux Bash Shell 快速入门

    BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  8. Linux Bash Shell快速入门(一)

    BASH 的基本语法· 最简单的例子 —— Hello World! · 关于输入.输出和错误输出 · BASH 中对变量的规定(与 C 语言的异同) · BASH 中的基本流程控制语法 · 函数的使 ...

  9. [Bash Shell] Shell学习笔记

    1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命 ...

随机推荐

  1. 离线环境下使用二进制方式安装配置Kubernetes集群

    本文环境 Redhat Linux 7.3,操作系统采用的最小安装方式. Kubernetes的版本为 V1.10. Docker版本为18.03.1-ce. etcd 版本为 V3.3.8. 1. ...

  2. .NET零基础入门10:打老鼠之数据存储

    一:数据库设计 到此为止,打老鼠游戏还不能保存每次游戏的成绩,我们今天完成的任务就是要存储成绩到SQLSERVER的数据库中. 在上节课中,我们已经知道了如何创建数据库,所有,先创建数据库" ...

  3. JAVA中String.format的用法 格式化字符串,格式化数字,日期时间格式化,

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式        我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...

  4. NIO中的heap Buffer和direct Buffer区别

    在Java的NIO中,我们一般采用ByteBuffer缓冲区来传输数据,一般情况下我们创建Buffer对象是通过ByteBuffer的两个静态方法: ByteBuffer.allocate(int c ...

  5. 前端Js框架汇总【转】

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

  6. ASP.NET 网站管理工具介绍

    有没有感觉对 web.config 的操作很烦呢? 老是手动来编辑 web.config 确实挺麻烦的, 不过自 ASP.NET 2.0 起便有了 ASP.NET 网站管理工具, 这个工具呢,其实就是 ...

  7. 大数据开发实战:Storm流计算开发

    Storm是一个分布式.高容错.高可靠性的实时计算系统,它对于实时计算的意义相当于Hadoop对于批处理的意义.Hadoop提供了Map和Reduce原语.同样,Storm也对数据的实时处理提供了简单 ...

  8. 九度oj-1001-Java

    题目描述:     This time, you are supposed to find A+B where A and B are two matrices, and then count the ...

  9. TensorFlow实战12:Bidirectional LSTM Classifier

    https://blog.csdn.net/felaim/article/details/70300362 1.双向递归神经网络简介 双向递归神经网络(Bidirectional Recurrent ...

  10. 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)

    https://blog.csdn.net/u012328159/article/details/80252012 我们在训练神经网络模型时,最常用的就是梯度下降,这篇博客主要介绍下几种梯度下降的变种 ...