为Android9 及以上高版本设备 适配支持scp、ssh命令

在Android设备上默认是不支持使用scp,或者ssh 命令的。

下面通过举例分析如何给Android9及以上Android版本的 设备上移植dropbear,使android 支持scp 、ssh 命令。

dropbear 不多说,可以直接百度了解。

取出网络上分析的dropbear 源码包,https://pan.baidu.com/s/1kV9gmEj 提取码: 4mk6

放置在任意的Android 源码路径下,解压后在dropbear 路径下 ,(本例子放置在external,目录下然后使用unzip 命令解压。

解压后在external/dropbear目录下,直接执行mm命令编译。不出意外,是编译不过的。

大概率会遇到如下报错:

external/dropbear/libtomcrypt/src/ciphers/des.c:1872:31: error: unused parameter 'skey' [-Werror,-Wunused-parameter]

external/dropbear/common-channel.c:845:53: error: passing 'char [1]' to parameter of type 'const unsigned char *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
send_msg_channel_open_failure(remotechan, errtype, "", "");

external/dropbear/common-algo.c:42:20: error: unused parameter 'num_rounds' [-Werror,-Wunused-parameter]
            int keylen, int num_rounds, void *cipher_state) {
external/dropbear/dbutil.c:508:12: error: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Werror,-Wint-conversion]
        baseshell = basename(usershell);
                  ^ ~~~~~~~~~~~~~~~~~~~

说明,改源码包已经不能在Android 高版本上直接编译并使用。

需要合入本人适配过的补丁:

链接:https://pan.baidu.com/s/1jQGD888ibnDNNc-wJMkRqA 
提取码:abwy 

补丁主要改动有,

1,改Android.mk 为Android.bp 编译。并把之前默认编译到/system/xbin/的程序改为编译到/vendor/bin 路径下。修改ssh 登录后的默认配置环境变量path中添加/vendor/bin/.

2,基于Android高版本的原因,改动默认登录路径由之前的system/etc/为/vendor/etc/

3,增加编译原包没有编译的 dbclient

合入操作记录如下:


drwxrwxr-x   4 admin admin    4096 Jun 22 09:25 zxing/
drwxrwxr-x  30 admin admin    4096 Sep  1 20:01 ../
-rwxrw-r--   1 admin admin 2436601 Oct 25 09:20 dropbear.zip*
drwxrwxr-x 288 admin admin   12288 Nov  1 19:20 ./
admin@ubuntu1804:~/aosp9r40/external$
admin@ubuntu1804:~/aosp9r40/external$
admin@ubuntu1804:~/aosp9r40/external$ 
admin@ubuntu1804:~/aosp9r40/external$ unzip dropbear.zip
Archive:  dropbear.zip
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/bit/der_decode_bit_string.c
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/bit/der_encode_bit_string.c
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/bit/der_length_bit_string.c
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/boolean/der_decode_boolean.c
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/boolean/der_encode_boolean.c
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/boolean/der_length_boolean.c
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/choice/der_decode_choice.c
  inflating: dropbear/libtomcrypt/src/pk/asn1/der/ia5/der_decode_ia5_string.c
.......
admin@ubuntu1804:~/aosp9r40/external$ git init .
admin@ubuntu1804:~/aosp9r40/external$ git add .
admin@ubuntu1804:~/aosp9r40/external$ git commit -m 'init git repository'
admin@ubuntu1804:~/aosp9r40/external$ git log .
commit edf0c50f7b1aa4022b8f7c0f3f744718014e4158 (HEAD -> master)
Author: Δ <Δ@126.com>
Date:   Tue Nov 1 19:24:05 2022 +0800

    init git repository


admin@ubuntu1804:~/aosp9r40/external/dropbear$ git apply ~/patch-for-dropbear-scp.diff
/home/admin/patch-for-dropbear-scp.diff:48: trailing whitespace.
        "netbsd_getpass.c"
/home/admin/patch-for-dropbear-scp.diff:61: trailing whitespace.
    local_include_dirs:[
/home/admin/patch-for-dropbear-scp.diff:65: trailing whitespace.
/home/admin/patch-for-dropbear-scp.diff:82: space before tab in indent.
        "-DDROPBEAR_CLIENT",
/home/admin/patch-for-dropbear-scp.diff:94: trailing whitespace.
    local_include_dirs:[
warning: squelched 8 whitespace errors
warning: 13 lines add whitespace errors.
admin@ubuntu1804:~/aosp9r40/external/dropbear$
admin@ubuntu1804:~/aosp9r40/external/dropbear$ mm

No need to regenerate ninja file
No need to regenerate ninja file
[ 50% 1/2] glob external
[100% 368/368] Install: out/target/product/rk3399/vendor/bin/dbclient

#### build completed successfully (04:44 (mm:ss)) ####

admin@ubuntu1804:~/aosp9r40$ ll out/target/product/rk3399/vendor/bin/
........
-rwxrwxr-x 1 admin admin   24244 Apr 25  2022 video_test*
-rwxrwxr-x 1 admin admin   24348 Apr 25  2022 ctctestone*
-rwxrwxr-x 1 admin admin   41488 Nov  1 19:31 scp*
-rwxrwxr-x 1 admin admin   55936 Nov  1 19:31 dropbearkey*
-rwxrwxr-x 1 admin admin   50648 Nov  1 19:31 sftp-server*
-rwxrwxr-x 1 admin admin  190904 Nov  1 19:31 dropbear*
-rwxrwxr-x 1 admin admin  182556 Nov  1 19:31 ssh*
drwxrwxr-x 3 admin admin    4096 Nov  1 19:31 ./
-rwxrwxr-x 1 admin admin  182660 Nov  1 19:31 dbclient*
admin@ubuntu1804:~/aosp9r40$

admin@ubuntu1804:~/aosp9r40/external/dropbear$ git log .
commit edf0c50f7b1aa4022b8f7c0f3f744718014e4158 (HEAD -> master)
Author: Δ <Δ@126.com>
Date:   Tue Nov 1 19:24:05 2022 +0800

    init git repository
admin@ubuntu1804:~/aosp9r40/external/dropbear$ git add .
admin@ubuntu1804:~/aosp9r40/external/dropbear$ git commit -m 'modify for android9'
[master 4d4a7d8] modify for android9
 17 files changed, 656 insertions(+), 274 deletions(-)
 create mode 100644 Android.bp
 delete mode 100644 Android.mk
 create mode 100644 libtomcrypt/Android.bp
 delete mode 100644 libtomcrypt/Android.mk
 create mode 100644 libtommath/Android.bp
 delete mode 100644 libtommath/Android.mk
 create mode 100644 sftp-server/Android.bp
 delete mode 100644 sftp-server/Android.mk
admin@ubuntu1804:~/aosp9r40/external/dropbear$ git log .
commit 4d4a7d8f71e35d636e793702bd566dc36fde0e98 (HEAD -> master)
Author: Δ <Δ@126.com>
Date:   Tue Nov 1 19:43:05 2022 +0800

    modify for android9

commit edf0c50f7b1aa4022b8f7c0f3f744718014e4158
Author: Δ <Δ@126.com>
Date:   Tue Nov 1 19:24:05 2022 +0800

    init git repository
admin@ubuntu1804:~/aosp9r40/external/dropbear$

vendor/bin/目录生产新的目标程序文件后

1, adb  push  到Android设备的 /vendor/bin/路径下:

 adb push out/target/product/rk3399/vendor/bin/scp  /vendor/bin/
 adb push out/target/product/rk3399/vendor/bin/dropbearkey /vendor/bin/
 adb push out/target/product/rk3399/vendor/bin/sftp-server /vendor/bin/
 adb push out/target/product/rk3399/vendor/bin/dropbear /vendor/bin/
 adb push out/target/product/rk3399/vendor/bin/ssh /vendor/bin/
 adb push out/target/product/rk3399/vendor/bin/dbclient /vendor/bin/

push 之后,此时已经可以在Android设备下使用scp 命令、和在Android设备上使用ssh 命令登录其他设备

后面的步骤是为了支持在其他设备(如Windows 平台,或者linux 终端)上使用ssh 登录该Android设备。(该版本dropbear用户名为root密码123456端口为2223,在代码中可以搜索到)

2, Android设备shell 环境下,依次执行

console:/ # mkdir -p  /vendor/etc/dropbear/.ssh

console:/ # dropbearkey -t dss -f /vendor/etc/dropbear/dropbear_dss_host_key
Will output 1024 bit dss secret key to '/vendor/etc/dropbear/dropbear_dss_host_key'
Generating key, this may take a while...
Public key portion is:
ssh-dss AAAAB3NzaC1kc3MAAACBAMkWtyE1v4S3ZqzY........
Fingerprint: md5 c4:fd:25:f3:4a:6c:e2:63:b4:5c:fd:44:e0:d8:47:69
console:/ #

console:/ # dropbearkey -t rsa -f /vendor/etc/dropbear/dropbear_rsa_host_key
Will output 1024 bit rsa secret key to '/vendor/etc/dropbear/dropbear_rsa_host_key'
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABA......Q8HWjgRoNbZjHu7s= root@localhost
Fingerprint: md5 87:82:3b:50:62:99:83:58:b7:83:de:af:17:50:5f:2f

运行ssh 服务:

 console:/ # dropbear -E -F -v &   不带 -v ,设备串口不会打印很多信息

3,及可以在其他终端设备上登录这个Android设备了

从windows 上登录:

edb19eeda05a4458b4b2b11c03ed03da.png

从unbuntu 上登录 Android 设备:

admin@ubuntu1804:~$ ssh root@192.168.0.9 -p 2223
The authenticity of host '[192.168.0.9]:2223 ([192.168.0.9]:2223)' can't be established.
RSA key fingerprint is SHA256:6spjNDrTOHI3+pYqF1M/QP4Zl+Wt6QARtkfCEJUQ8MM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.0.9]:2223' (RSA) to the list of known hosts.
root@192.168.0.9's password:
:/vendor/etc/dropbear #
:/vendor/etc/dropbear #
:/vendor/etc/dropbear #
:/vendor/etc/dropbear # getprop | grep ndk
[ro.vndk.lite]: [true]
[ro.vndk.version]: [28]
:/vendor/etc/dropbear #

从unbuntu上 通过scp 往Android设备复制文件:

admin@ubuntu1804:~$ scp -P 2223  patch-for-dropbear-scp.diff root@192.168.0.9:/sdcard/
The authenticity of host '[192.168.0.9]:2223 ([192.168.0.9]:2223)' can't be established.
RSA key fingerprint is SHA256:6spjNDrTOHI3+pYqF1M/QP4Zl+Wt6QARtkfCEJUQ8MM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.0.9]:2223' (RSA) to the list of known hosts.
root@192.168.0.9's password:
patch-for-dropbear-scp.diff        100%   33KB   1.8MB/s   00:00

unbuntu从Android设备上取文件:

admin@ubuntu1804:~$ scp -P  2223 root@192.168.0.9:/sdcard/patch-for-dropbear-scp.diff ./
root@192.168.0.9's password:
patch-for-dropbear-scp.diff         100%   33KB   4.3MB/s   00:00
admin@ubuntu1804:~$

完毕!

亲测试过Android9、10功能正常。

借鉴参考:

Android配置ssh服务_xiezhaoxian的博客-CSDN博客_android ssh服务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值