【MindStudio】【OpenSSH】海思SOC环境准备(linux + android)

网友投稿 1153 2022-05-30

1       背景

当前Mindstudio及配套ADK需要从ADX切换到SSH,MindStudio需要通过SSH登录对应的AI-Host。对于C7x、MDC、DC环境,可以通过系统包管理器apt/yum等直接安装openSSH-server;而海思Soc Linux/Android环境是精简过的嵌入式环境,必须通过源码编译的方式进行安装。此处以CS形态为例。

2       Linux环境OpenSSH服务搭建

2.1       交叉编译

2.1.1       版本选择及源码准备

OpenSSH-:

https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz

OpenSSH依赖2个开源库:zlib与OpenSSL

zlib 1.2.11:  https://zlib.net/zlib1211.zip

OpenSSL 1.1.1g:  https://www.openssl.org/source/openssl-1.1.1g.tar.gz

同样下载源码压缩包至本地。

2.1.2       交叉编译环境准备

获取发布包中的对应交叉编译器,CS形态使用的交叉编译器为aarch64-himix210-linux。交叉编译环境这里以x86_64的Ubuntu18.04为例。

1

tar xvf aarch64-himix210-linux.tgz

进入解压后的目录,并使用root用户权限执行安装脚本(可以参考readme指定其他安装路径):

1

cd aarch64-himix210-linux

2

sudo ./aarch64-himix210-linux.install

此时交叉编译器已被安装至/opt/hisi-linux/x86-arm路径下,所需的环境变量也已自动更新到/etc/profile中。执行以下命令应该能正常显示gcc版本:

1

source /etc/profile && aarch64-himix210-linux-gcc -v

2.1.3       交叉编译

【MindStudio】【OpenSSH】海思SOC环境准备(linux + android)

解压zlib的源码压缩包,并进入解压后的目录。

1

tar xf zlib-1.2.11.tar.gz

2

cd zlib-1.2.11/

配置交叉编译器及安装路径:

1

CC=aarch64-himix210-linux-gcc ./configure --prefix=$HOME/install/zlib

编译及安装:

1

make -j

2

make install

解压openssl的源码压缩包,并进入解压后的目录。

1

tar xf openssl-1.1.1g.tar.gz

2

cd openssl-1.1.1g

配置编译选项、交叉编译器及安装路径:

1

./config no-asm shared --cross-compile-prefix=aarch64-himix210-linux- --prefix=$HOME/install/openssl

将生成的Makefile中的所有"-m64"修改为"-mabi=lp64":

编译及安装:

1

make -j # 注:make -j并行编译可能会失败,若失败可直接make

2

make install

解压openssh的源码压缩包,并进入:

1

tar xf openssh-8.0p1.tar.gz

2

cd openssh-8.0p1

配置:

1

./configure --host=aarch64-linux --with-libs --with-zlib=$HOME/install/zlib --with-ssl-dir=$HOME/install/openssl CC=aarch64-himix210-linux-gcc AR=aarch64-himix210-linux-ar --prefix=$HOME/install/openssh --exec-prefix=$HOME/install/openssh --disable-etc-default-login --disable-strip

编译及安装:

1

make -j

2

make install

解压openssh的源码压缩包,并进入:

1

tar xf openssh-8.0p1.tar.gz

2

cd openssh-8.0p1

配置:

1

./configure --host=aarch64-linux --with-libs --with-zlib=$HOME/install/zlib --with-ssl-dir=$HOME/install/openssl CC=aarch64-himix210-linux-gcc AR=aarch64-himix210-linux-ar --prefix=$HOME/install/openssh --exec-prefix=$HOME/install/openssh --disable-etc-default-login --disable-strip

编译及安装:

1

make -j

2

make install

install时若提示无权限创建/var/empty(privilege separation directory),则可以使用sudo创建后再使用chown改变owner。

再次执行make install,此时若提示ssh-keygen执行失败,这是由于arm架构的可执行文件不识别,可暂时忽略,因为所需的文件(sshd, sftp-server, ssh-keygen等)都已安装至目标路径。

2.2       部署

参考MindStudio文档中的海思Soc环境准备一节。在刚才的交叉编译服务器上安装NFS服务,将刚才的安装路径($HOME/install)开放出去。

使用root账号,通过telnet登录海思Soc环境,在海思Soc的板端挂载该远程路径。

切换至挂载目录,部署zlib和openssl相关产物:

1

cp zlib/lib/libz.so.1 /usr/lib

2

cp openssl/lib/libcrypto.so.1.1 /usr/lib

切换至OpenSSH安装路径,OpenSSH相关产物如下:

部署所需的可执行文件:

1

2

3

使用ssh-keygen生成秘钥对:

1

2

参考该链接创建sshd组。

在/etc/passwd中加上:

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

在/etc/group中加上:

sshd:x:74:

创建privilege separation directory:

1

拷贝config至/etc并修改:

1

修改点1:将拷贝后的文件中的

#PermitRootLogin prohibit-password

改为

PermitRootLogin yes

使得可以使用root账号的账号密码登录。

修改点2:在subsystem条目配置正确的sftp-server路径:

Subsystem       sftp    /usr/lib/sftp-server

修改完成后启动sshd,需指定config和key的路径:

1

2.3  验证

在其他主机上使用ssh远程登录海思Soc板端执行命令或使用sftp访问文件:

3       Android环境OpenSSH服务搭建(V900版本/96CV300版本)

3.1     下载V900/96CV300源码

3.2     修改device.mk文件

v900文件路径:device/huanglong/shaolingun/device.mk

96CV300文件路径:device/huanglong/wudangstick/device.mk

在device.mk中增加如下编译选项:

# Openssh

PRODUCT_PACKAGES += \

scp \

sftp \

ssh \

sshd \

sshd_config \

ssh-keygen \

start-ssh

3.3     修改externel/openssh下的Android.mk文件

在sshd模块的编译选项中,添加:

LOCAL_CFLAGS += -DSSHDIR=\"/data/run/ssh\"

3.4     编译andorid源码,重新烧写镜像,

v900编译指令

a) source build/envsetup.sh

b) lunch shaolingun_SEC-eng

c) ./device/huanglong/build/build.sh

2. 96cv300编译指令

a) source build/envsetup.sh

b) lunch wudangstick_SEC-eng

c) ./device/huanglong/build/build.sh

3.5     创建目录结构,以下操作都在板端进行

mkdir -p /data/ssh/empty

chmod 700 /data/ssh

chmod 700 /data/ssh/empty

其中, /data/ssh用来存放密钥文件和sshd配置文件

3.6   生成配置文件

cat /system/etc/ssh/sshd_config | \

sed 's/#PermitRootLogin yes$/PermitRootLogin without-password/' | \

sed 's/#RSAAuthentication yes/RSAAuthentication yes/' | \

sed 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' | \

sed 's/PasswordAuthentication no/#PasswordAuthentication no/' | \

sed 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/' | \

sed 's/#ChallengeResponseAuthentication yes/ChallengeResponseAuthentication yes/' | \

sed 's/#UsePrivilegeSeparation yes/UsePrivilegeSeparation no/' | \

sed 's;/usr/libexec/sftp-server;internal-sftp;' > \

/data/ssh/sshd_config

chmod 600 /data/ssh/sshd_config

这里需要说明的是我们需要配置为root使用, 同时又不需要密码.另外, 需要注意配置文件中指定了AuthorizedKeysFile为/data/ssh/authorized_keys

3.7      生成秘钥

在Windows/Linux上通过下面的命令来生成密钥

ssh-keygen -t rsa -C "your_email_address"

上面的命令会在主目录下生成.ssh目录, 目录包含id_rsa(私钥)和id_rsa.pub(公钥)两个文件

然后通过adb等命令将id_rsa.pub上传至Android中(!!!文件要对应于AuthorizedKeysFile!!!)

adb push id_rsa.pub /data/ssh/authorized_keys

chmod 600 /data/ssh/authorized_keys

chown root:root /data/ssh/authorized_keys

cd   /data/ssh/

ssh-keygen  -t rsa  -f  ssh_host_rsa_key

ssh-keygen  -t dsa  -f  ssh_host_dsa_key

这里passphrase默认为空

3.8       启动

mkdir -p /data/local/userinit.d

cat /system/bin/start-ssh | \

sed 's;/system/etc/ssh/sshd_config;/data/ssh/sshd_config;' > \

/data/local/userinit.d/99sshd

chmod 755 /data/local/userinit.d/99sshd

通过上面的命令单独生成一个启动脚本,后就可以通过执行下面的脚本来启动sshd

/data/local/userinit.d/99sshd

实际操作过程中如果出现问题也可以通过下面的命令以调试的方式来启动sshd

/system/bin/sshd -f /data/ssh/sshd_config -D -ddd

执行的时候第一次会报/data/run/ssh/empty不存在的问题,创建该文件夹并修改权限即可。

mkdir -p /data/run/ssh/empty

chmod 600 /data/run/ssh/empty

chown root:root /data/run/ssh/empty

备注:/system/bin/sshd -f /data/ssh/sshd_config -D -ddd 这个是调试命令,client端连接上后就断开。如果想服务持续运行,把后面的 -D -ddd删除,或者直接运行启动脚本

Android Linux

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何在Excel2016表格中快速自动填充一列
下一篇:Nav2极简笔记01-安装与试用
相关文章