美文网首页
Android外网远程SSH调试环境

Android外网远程SSH调试环境

作者: momxmo | 来源:发表于2021-04-13 16:49 被阅读0次

    目的:让你的Android设备支持远程SSH功能

    主要分几个模块实现:
    • Android移植openssh功能
    • 内网穿透

    安卓平台环境:rk3399
    内网穿透服务器:阿里云
    编译环境:ubuntu14

    一、Android移植openssh功能

    ssh源码位置:rk3399_android7.1/external/openssh
    1、添加到打包编译
    rk3399_android7.1/device/rockchip/rk3399/rk3399_box.mk

    # Openssh
    PRODUCT_PACKAGES += \
           libssh \
           ssh \
           sftp \
           scp \
           sshd \
           sshd_config \
           ssh-keygen \
           start-ssh
    

    编译烧录system.img后,板子上已经有ssh相关命令了
    安卓系统目录

    image.png
    2、重启android设备进入先创建出几个key
    mkdir  -p /data/ssh
    chmod  700 /data/ssh
    cd /data/ssh/
    ssh-keygen  -t rsa  -f  id_rsa -N  “自定义秘钥”
    

    这里生成id_rsa和id_rsa.pub文件
    3、将我们电脑上的公钥push进去

    adb  push  id_rsa.pub /data/ssh/authorized_keys
    

    4、更改sshd服务配置文件/system/etc/ssh/sshd_config

    #Port  22改为Port 22
    #PermitRootLogin yes改为PermitRootLogin  without-password
    #RSAAuthentication yes改为RSAAuthentication  yes
    #PubkeyAuthentication yes改为PubkeyAuthentication  yes
    PasswordAuthentication no改为#PasswordAuthentication  no
    #PermitEmptyPasswords no改为PermitEmptyPasswords  yes
    #ChallengeResponseAuthentication yes改为ChallengeResponseAuthentication  yes
    #UsePrivilegeSeparation  yes改为UsePrivilegeSeparation  no
    

    5、启动ssh服务

    #android系统内启动服务
    start-ssh
    

    6、selinux的安全策略配置

    #1、修改device/rockchip/common/sepolicy/file_contexts 添加
    /system/bin/start-ssh                  u:object_r:start-ssh_exec:s0
    
    #2、修改device/rockchip/common/sepolicy/start-ssh.te添加
    type start-ssh, domain;
    type start-ssh_exec, exec_type, file_type;
    
    init_daemon_domain(start-ssh)
    allow start-ssh start-ssh:tcp_socket { read write getopt getattr setopt accept create bind listen name_bind node_bind };
    allow start-ssh fwmarkd_socket:sock_file { write };
    allow start-ssh netd:unix_stream_socket { connectto };
    allow start-ssh start-ssh:fd { use };
    allow start-ssh port:tcp_socket { name_bind };
    allow start-ssh node:tcp_socket { node_bind };
    allow start-ssh system_file:file { execute_no_trans };
    allow start-ssh start-ssh:capability { setgid net_raw setuid dac_override net_bind_service };
    allow start-ssh start-ssh:udp_socket { create };
    allow start-ssh system_data_file:file { read open getattr create write };
    allow start-ssh system_data_file:dir { read write open getattr add_name };
    allow start-ssh rootfs:lnk_file { getattr };
    allow start-ssh shell_exec:file { getattr execute read open execute_no_trans };
    allow start-ssh devpts:chr_file { open ioctl getattr read write setattr getattr };
    
    #3、修改system/sepolicy/domain.te
    neverallow {
       -system_server
       -system_app
       -init
    +  -start-ssh
       -installd # for relabelfrom and unlink, check for this in explicit neverallow
     } system_data_file:file no_w_file_perms;
     # do not grant anything greater than r_file_perms and relabelfrom unlink
    

    7、编译运行烧录设备
    8、SSH连接(可以使用xshell进行连接默认端口22)
    运行起来后,用电脑连接,连接进去后直接就是root用户
    ssh root@192.168.0.1
    运行ok时的/data/ssh目录

    rk3399_box:/data/ssh # ls -l
    total 56
    -rw------- 1 root root  412 2021-04-13 06:51 authorized_keys
    -rw------- 1 root root  668 2021-04-13 06:51 ssh_host_dsa_key
    -rw------- 1 root root  604 2021-04-13 06:51 ssh_host_dsa_key.pub
    -rw------- 1 root root 1675 2021-04-13 06:51 ssh_host_rsa_key
    -rw------- 1 root root  396 2021-04-13 06:51 ssh_host_rsa_key.pub
    -rw------- 1 root root 3342 2021-04-13 06:51 sshd_config
    

    9、收尾工作
    a、把启动服务做进固件里面去
    b、然后将/data/ssh/里面的文件全部拷贝出来,编译的时候拷贝到system/etc/ssh/目录,开机再拷贝到data/ssh目录,并设置好相关的权限
    修改:rk3399_android7.1/device/rockchip/rk3399/init.rk3399.rc

    # For ssh 开机拷贝配置文件
         mkdir /data/ssh
         chmod 777 /data/ssh
         copy /system/etc/ssh/authorized_keys /data/ssh/authorized_keys
         copy /system/etc/ssh/ssh_host_dsa_key /data/ssh/ssh_host_dsa_key
         copy /system/etc/ssh/ssh_host_dsa_key.pub /data/ssh/ssh_host_dsa_key.pub
         copy /system/etc/ssh/ssh_host_ecdsa_key /data/ssh/ssh_host_ecdsa_key
         copy /system/etc/ssh/ssh_host_ecdsa_key.pub /data/ssh/ssh_host_ecdsa_key.pub
         copy /system/etc/ssh/ssh_host_rsa_key /data/ssh/ssh_host_rsa_key
         copy /system/etc/ssh/ssh_host_rsa_key.pub /data/ssh/ssh_host_rsa_key.pub
         copy /system/etc/ssh/sshd_config /data/ssh/sshd_config
         mkdir /data/ssh/empty
         chmod 600 /data/ssh/empty
         chmod 600 /data/ssh/authorized_keys
         chmod 600 /data/ssh/ssh_host_dsa_key
         chmod 600 /data/ssh/ssh_host_dsa_key.pub
         chmod 600 /data/ssh/ssh_host_ecdsa_key
         chmod 600 /data/ssh/ssh_host_ecdsa_key.pub
         chmod 600 /data/ssh/ssh_host_rsa_key
         chmod 600 /data/ssh/ssh_host_rsa_key.pub
         chmod 600 /data/ssh/sshd_config
    
    #open ssh 开机启动ssh服务
    service daemonssh /system/bin/start-ssh
           class main
           user  root
           group root
    

    修改:device/rockchip/rk3399/rk3399_box.mk 添加

    PRODUCT_COPY_FILES += \
           $(call find-copy-subdir-files,*,$(LOCAL_PATH)/ssh,system/etc/ssh)
    
    

    第一阶段完工,现在已经完全能在局域网内远程ssh安卓设备

    二、内网穿透

    这里需要到自己购买服务器,或者使用花生壳之类的,不建议使用免费,存在安全问题,最好自己搭建;
    代码:FRP开源项目
    服务器:阿里云
    文档:https://gofrp.org/docs/setup/
    1、下载源码
    https://github.com/fatedier/frp/releases
    根据云服务器、安卓的cpu架构选择对应的包下载;
    (客户端)RK3399 Cpu架构选:frp_0.36.2_linux_arm64.tar.gz
    (服务端)阿里云服务器CPU架构选:frp_0.36.2_linux_amd64.tar.gz
    2、安装
    服务端:

    #home目录下创建frp目录并拷贝源码到此目录,一定要修改执行权限
    [root@ frp]# ll
    total 22628
    -rwxrwxrwx 1 root root  9953280 Mar 18 11:24 frpc
    -rwxrwxrwx 1 root root     9433 Mar 18 11:26 frpc_full.ini
    -rwxrwxrwx 1 root root      126 Mar 18 11:26 frpc.ini
    -rwxrwxrwx 1 root root 13172736 Mar 18 11:24 frps
    -rwxrwxrwx 1 root root     5051 Mar 18 11:26 frps_full.ini
    -rwxrwxrwx 1 root root       26 Mar 18 11:26 frps.ini
    -rw-rw-r-- 1 root root    11358 Mar 18 11:26 LICENSE
    drwxrwxr-x 2 root root     4096 Apr 13 14:19 systemd
    

    修改配置,在具有公网 IP 的机器上部署 frps,修改 frps.ini 文件,这里使用了最简化的配置,设置了 frp 服务器用户接收客户端连接的端口:

    [common]
    bind_port = 7000
    

    启动服务

    ./frps -c ./frps.ini
    

    客户端(RK3399):
    在system目录下创建frpc并复制代码到该目录下,一定要修改执行权限

    rk3399_box:/system/frpc # ls -l
    total 42200
    __bionic_open_tzdata_path: ANDROID_DATA not set!
    __bionic_open_tzdata_path: ANDROID_ROOT not set!
    -rw-r--r-- 1 root root    11358 2021-03-19 06:05 LICENSE
    -rwxrwxrwx 1 root root  9240576 2021-03-19 06:04 frpc
    -rwxrwxrwx 1 root root      130 2021-04-13 06:34 frpc.ini
    -rwxrwxrwx 1 root root     9433 2021-03-19 06:05 frpc_full.ini
    -rw-r--r-- 1 root root 12320768 2021-03-19 06:04 frps
    -rw-r--r-- 1 root root       26 2021-03-19 06:05 frps.ini
    -rw-r--r-- 1 root root     5051 2021-03-19 06:05 frps_full.ini
    drwxrwxrwx 2 root root     4096 2021-04-13 06:41 systemd
    

    修改配置:在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x:

    [common]
    server_addr = x.x.x.x 你的阿里云ip地址
    server_port = 7000
    
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 6000
    

    local_ip 和 local_port 配置为本地需要暴露到公网的服务地址和端口。remote_port 表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。
    启动客户端:

    ./frpc -c ./frpc.ini
    

    最后

    通过xshell连接服务器ip,协议为SSH,端口号为6000,完美连上Rk3399(你的手机)
    ~ ~~~~~~~~大功告成

    遗留问题:1、使用用户名和密码登录ssh 2、将frpc客户端代码一起打包到rom里

    相关文章

      网友评论

          本文标题:Android外网远程SSH调试环境

          本文链接:https://www.haomeiwen.com/subject/crhclltx.html