在android10系统中配置openssh

在android10系统中配置openssh

引言

我们的板子和客户的板子通过网线相连接,然后用外壳包装起来了,客户的板子外接了网口、usb口和串口等接口,而我们的板子在壳子外面没有留出任何的接口,唯一可以登录到我们板子的方法是:通过客户的板子和我们板子的网线连接,利用ssh登录到我们板子上。如果我们的板子出现问题,并且网络也不通了,那就只有拆机,把调试接口接出来定位问题。这设计太 操蛋了,为了在网络通的情况下可以定位我们自己板子的问题,所以在我们的android10系统上必须配置好sshd工具。

编译方法

如果没有openssh的源码,可以采用如下命令下载其源码:

$ git  clone https://android.googlesource.***/platform/external/openssh

编译之前先打上如下补丁,这个补丁是使用sshd过程中遇到的问题而打上的。

$ source build/envsetup.sh

$ cd external/openssh

$ mm .

编译生成的文件如下:

/out/target/product/rk3568/system/lib64/libssh.so

/out/target/product/rk3568/system/lib/libssh.so

/out/target/product/rk3568/system/etc/ssh/sshd_config

/out/target/product/rk3568/system/bin/start-ssh

/out/target/product/rk3568/system/bin/ssh-keygen

/out/target/product/rk3568/system/bin/ssh

/out/target/product/rk3568/system/bin/sshd

移植过程

1、整体编译

        上述是编译模块,如果在编译整个android系统时也要编译openssh,需要在device/rockchip/rk356x/device.mk中增加如下代码

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


PRODUCT_COPY_FILES += \
    $(LOCAL_PATH)/authorized_keys.default:/system/etc/security/authorized_keys.default

上述拷贝的是ssh客户端的公钥,为什么要拷贝公钥呢?因为在android系统中不支持密码的方式登录,所以就用一个固定的公钥和私钥来登录。当用不同的客户端登录到服务端时,公钥已经默认放入到android系统中了(如上述的拷贝代码),再把保存好的公钥和私钥放入到客户端的.ssh文件夹中即可,这样也就不用去修改android设备里面的公钥了。

2、添加sshd服务

        在device/rockchip/rk356x/init.rk356x.rx添加如下代码

service ssh_server /system/bin/start-ssh
    class main
    user root
    group root system
    disabled
    oneshot
    seclabel u:r:ssh_server:s0

on property:sys.boot_***plete=1
    start ssh_server

        添加上述代码后,sshd在开机时就会自启动。

3、为sshd服务添加selinux权限

        在device/rockchip/***mon/sepolicy/vendor目录下创建ssh_server.te文件,输入如下内容:

type ssh_server, domain;
type ssh_server_exec, exec_type, vendor_file_type, file_type;

init_daemon_domain(ssh_server)

allow ssh_server system_file:file { getattr execute execute_no_trans map read open };
allow ssh_server self:capability { setgid };
allow ssh_server shell_exec:file { map read execute getattr };
allow ssh_server self:tcp_socket { a***ept getattr getopt setopt write read };
allow ssh_server fwmarkd_socket:sock_file { write };
allow ssh_server ***d:unix_stream_socket { connectto };
allow ***d ssh_server:fd { use };
allow ssh_server self:udp_socket { create };
allow ssh_server mnt_user_file:dir { search getattr };
allow ssh_server self:capability { sys_chroot setuid };

调试过程

1、将前面编译好的程序都push到设备的对应目录下

2、执行mkdir -p /data/ssh命令创建/data/ssh目录

3、执行start-ssh命令

        在/data/ssh目录下将创建公钥和私钥文件

4、创建必要的目录和文件

        mkdir -p /storage/run

        mkdir -p /storage/run/ssh

        mkdir -p /storage/run/ssh/empty

        chmod 0600  /storage/run/ssh/empty

5、将客户端公钥放入服务端中

        cat id_rsa.pub > /data/ssh/authorized_keys

        chmod 0600 /data/ssh/authorized_keys

        chown root:root /data/ssh/authorized_keys

6、启动sshd服务

        执行start-ssh即可

7、客户端登录

        1、生成私钥和公钥

                ssh-keygen -t rsa -b 1024

        2、ssh root@192.168.11.1登录即可

                如下图所示

                

8、问题处理

        如果出现如下问题

        

        则删除客户端的.ssh目录下的known_hosts文件即可

参考资料

https://blog.csdn.***/hwq331717300/article/details/72270910

转载请说明出处内容投诉
CSS教程网 » 在android10系统中配置openssh

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买