在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 +0800init 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$ mmNo 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 +0800init 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 +0800modify for android9
commit edf0c50f7b1aa4022b8f7c0f3f744718014e4158
Author: Δ <Δ@126.com>
Date: Tue Nov 1 19:24:05 2022 +0800init 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 上登录:
从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功能正常。
借鉴参考: