hi3516 编译SSH

    3516 编译SSH

必备条件

检查网络

检查局域网内未使用的IP。可以参考https://jingyan.baidu.com/article/e6c8503ca1dd67e54e1a1841.html

或者 使用命令,arp -a; 这一步是为了后面设置sshd服务器内网ip 的时候不会和局域网内的其他ip冲突。

例如arp -a 之后局域网内所有的ip如下:

usernamedeMacBook-Pro:~ panxiaogong$ arp -a
? (192.168.0.1) at 94:d9:b3:d1:6a:60 on en0 ifscope [ethernet]
? (192.168.0.101) at 58:6b:14:53:d4:5b on en0 ifscope [ethernet]
? (192.168.0.103) at 34:ab:37:33:db:3e on en0 ifscope [ethernet]
? (192.168.0.105) at ac:e4:b5:7e:42:cd on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]

所以可以设置hi3516 的 ip 为未占用的192.168.0.106 等等

 

设置编译条件

在系统 /etc/profile 或者 用户目录下的 .bashrc 中设置CXX 和 CC;例如 想要生成在hi3516运行的程序,设置为

export CC=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc

export CXX=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++

  这一步的目的是为了后面configure 编译脚本时,自动添加为想要使用的编译器;记得如果想要生成编译环境自身可以运行的程序,例如ubuntu上的可运行程序,记得注释掉 上面的两条。

另外一种建议的编译方式是:不修改编译工具,直接查看ssh 下载下来的 configure 文件,并进行编译环境的修改。

下载需要用到的软件包

1. zlib-1.2.11.tar.gz 

2.openssl-1.1.1

3.openssh

注意:建议先下载openssh,然后阅读openssh 对应版本的文档指导,查看支持的zlib 和 openssl 版本。zlib 和 openssl 都是编译openssh 需要用到的。

编译

编译zlib

./configure  --prefix=/home/panxiaogong/work/3516/3rdparty/install
  •  这一步中的--prefix 是为了将安装路径设置在想要安装的同意路径

  • ./configure 操作会生成编译用的makefile,使用vim 查看这个文件是否将环境变量设置的正常:

CC=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc



CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1

#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7

#CFLAGS=-g -DDEBUG

#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \

#           -Wstrict-prototypes -Wmissing-prototypes



SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1

CROSS=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-

LDFLAGS= -L. libz.a

LDSHARED=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map

CPP=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc -E



STATICLIB=libz.a

SHAREDLIB=libz.so

SHAREDLIBV=libz.so.1.2.4

SHAREDLIBM=libz.so.1

LIBS=$(STATICLIB) $(SHAREDLIB) $(SHAREDLIBV)



AR=$(CROSS)ar rc

RANLIB=$(CROSS)ranlib

 

附录

由于ssh是别比较常见的命令,为了在登录失败或者连接失败的时候,想知道更加详细的信息可以使用以下方式查看链接过程:

ssh -vvv username@192.168.1.100  

这样会打印详细的链接日志;注意v 的个数决定了ssh 链接时的日志等级,即日志的详细程度。这个参数的详细内容可以通过

man ssh

 

 

 

 

  •  

 

  • 其中最重要的检查:CC,AR,RANLIB NM;我参考了别人的做法,设置一个自定义的make 变量CROSS;更改之后编译即可:

make -j6 #设置运行线程

make install

  1. 编译ssl

./config no-asm no-async shared --prefix=/home/panxiaogong/work/3516/3rdparty/install --cross-compile-prefix=arm-himix200-linux-

no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的。

shared :生成动态连接库。

zlib : 支持压缩库

--prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)

参考:https://www.jianshu.com/p/5f260723f5f8 

 

  •   对config 生成的makeFIle 进行修改

CROSS=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-

CC= /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc

CFLAG= -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -O3 -Wall

DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS

PEX_LIBS=

EX_LIBS= -ldl -lz

EXE_EXT=

ARFLAGS=

AR= $(CROSS)ar $(ARFLAGS) r

RANLIB= $(CROSS)ranlib

RC= windres

NM= $(CROSS)nm

PERL= /usr/bin/perl

TAR= tar

TARFLAGS= --no-recursion

MAKEDEPPROG= /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc

  • 对zlib 的文件路径进行修改

-I/home/panxiaogong/work/3516/3rdparty/install/include

注意,这里的-I 是否需要加上,我这里需要加上

  • 由于我编译的时候发生如下错误:

error: unrecognized command line option '-m64

找到CFLAGS 删掉这个即可

 

  1. 编译openssh

./configure --host=arm-linux --with-libs --with-zlib=/home/panxiaogong/work/3516/3rdparty/install  --with-ssl-dir=/home/panxiaogong/work/3516/3rdparty/install --disable-etc-default-login --prefix=/home/panxiaogong/work/3516/3rdparty/install

--with-zlib 这个参数的目的时添加刚刚生成的zlib,

1. 下载需要的源码,直接google最新的版本吧 mkdir -p ~/arm/fs ;mkdir -p ~/arm/source 下载zlib: zlib-1.2.3.tar.gz 下载ssl : openssl-0.9.8d.tar.gz 下载ssh : openssh-4.6p1.tar.gz

2. 编译

  • make -j9

  • 注意,建议使用zlib 和 openssl 的静态库,如果是动态库需要通过以下方法将zlib 和 ssl 库拷贝到目标机器上

 

#将安装路径install 里面的 动态库,压缩成lib.tar

#这一步的目的是防止动态库之间的链接文件关系失效

tar -cvf  lib.tar  *

#然后将 lib.tar 使用tftp 放到目标板上并解压

tar -xvff lib.tar

 

  • make 完之后发现,make install 失败,不要在意,可以手动拷贝生成的可执行文件,其中包括 :

 

scp

sftp

sftp-server

ssh

ssh-add

ssh-agent

ssh-keygen

ssh-keyscan

ssh-keysign

ssh_config

sshd

sshd_config

 

  • 将sshd 拷贝到 3516 的 /usr/sbin 目录

  •  将以下文件拷贝到3516 的 /usr/local/bin

scp

sftp

ssh

ssh-add

ssh-agent

ssh-keygen

ssh-keyscan

  •  拷贝 sftp-server ssh-keysign 到3516 /usr/local/libexec

  •  在目标板3156 下: mkdir -p /usr/local/etc/;将sshd_config , ssh_config 拷贝到该目录下

  • 制作日志目录

mkdir -p /var/run

mkdir -p /var/empty/sshd

chmod 755 /var/empty

 

  1. 设置环境变量

vi ~/.profile

export PATH=$PATH:/usr/local/bin

 

  1. 生成密钥 

    1. 本地的机器上面执行

ssh-keygen -q -t ed25519 -f ssh_host_ed25519_key -C '' -N '' 

ssh-keygen -q -t rsa -f ssh_host_rsa_key -C '' -N '' 

ssh-keygen -q -t dsa -f ssh_host_dsa_key -C '' -N '' 

chmod 600 ssh_host_ed25519_key

chmod 644ssh_host_ed25519_key.pub 

chmod 600 ssh_host_rsa_key 

chmod 644 ssh_host_rsa_key.pub 

chmod 600 ssh_host_dsa_key 

chmod 644 ssh_host_dsa_key.pub

 

4.测试

目标板启动sshd:

 

首先在 3516上面

 

adduser sshd

然后需要设置板子的ip

 

ifconfig eth0 172.10.10.83 netmask 255.255.255.0

route add default gw  172.10.10.1#网关

其中网关地址172.10.10.1 和想进行ssh 登陆3516 的本机网关一致,可以通过ipconfig 或者ifconfig 查看

 

 

# /usr/sbin/sshd  -f /usr/local/etc/sshd_config &

 

 

//在开发板上运行这个命令的时候可能会提示 //Privilege separation user sshd does not exist //需要在开发板的系统里adduser shhd //或者在 /etc/passwd 中添加下面这一行

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

主机: $ ssh root@192.168.0.34(开发板的ip) //root密码就是你本机上root的密码

   移植完成了    目标板启动sshd: # /usr/sbin/sshd      主机: $ ssh -v root@192.168.0.34 但是有点问题会报一大堆错,高手告诉我要删掉 /root/.ssh/known_hosts

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值