OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3930|回复: 2

分享移植ssh到嵌入式平台的经验, 内附编译的源码和文件

[复制链接]

3

主题

400

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1746
金钱
1746
注册时间
2015-6-11
在线时间
308 小时
发表于 2020-5-3 08:55:30 | 显示全部楼层 |阅读模式
本帖最后由 zc123 于 2020-5-3 10:11 编辑

嵌入式Linux开发其实使用nfs基本可以满足编译测试的需求,不过使用ssh直接传输也是比较方便的方法,附件中包含编译后的ssh的固件注意:sshd至少要占有23M的空间,且必须支持网络连接,先确定是否满足需求。
固件使用体验:
       在开发板上创建以下目录(内部说明文件中也包含该内容)
1. 创建文件目录,并上传
  1. mkdir -p /usr/local/bin
  2. mkdir -p /usr/local/etc
  3. mkdir -p /usr/libexec
  4. mkdir -p /var/run
  5. mkdir -p /var/empty
复制代码
可通过内存卡或者在nfs系统下
将scp、sftp、ssh\sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keysca拷贝到/usr/local/bin/中
将moduli、ssh_config、sshd_config拷贝到/usr/local/etc/中
将sftp-server、ssh-keysign拷贝到/usr/libexec/中
将libz.so.1.2.11拷贝到/lib/中
将passwd拷贝到/etc/中
2. 生成密钥
利用串口连接到嵌入式平台,执行如下指令
  1. cd /usr/local/etc/
  2. /usr/local/bin/ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
  3. /usr/local/bin/ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
  4. /usr/local/bin/ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
  5. /usr/local/bin/ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""
复制代码
因为嵌入式平台性能较差,执行时间会较长,另外
如果出现-sh: ./ssh-keygen: Permission denied,这是因为移动时丢失的读写权限,执行如下指令
  1. chmod 777 /usr/local/bin/*
  2. chmod 777 /usr/local/etc/*
  3. chmod 777 /usr/local/libexec/*
复制代码
另外可能显示缺少libz.so.1库文件,这是个软链接,链接到libz.so.1.2.11, 执行指令
  1. ln -s libz.so.1.2.11 libz.so.1<div>ln -s libz.so.1.2.11 libz.so</div>
复制代码
如果提升缺少uid,是因为/etc/passwd没有上传, 将提供的/etc/passwd修改上传即可。
等待生成完成即可。
3.启动sshd
此后执行
  1. /usr/local/bin/sshd
复制代码
即可开启sshd
可通过
  1. ps -e | grep sshd
复制代码
查看状态
另外sshd_config是修改后版本, 编译后效果和使用体验见附件。

2.png
1.png

SSH编译资源包.zip

16.03 MB, 下载次数: 46

源码和编译后固件

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

400

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1746
金钱
1746
注册时间
2015-6-11
在线时间
308 小时
 楼主| 发表于 2020-5-3 09:29:34 | 显示全部楼层
本帖最后由 zc123 于 2020-5-3 10:15 编辑

下面如何从openssh的源码编译到能够执行的程序,编译需要
  1. openssl-1.0.2s.tar.gz
  2. zlib-1.2.11.tar.gz
  3. openssh-8.0p1.tar.gz
复制代码
1. 创建编译环境
选择指定文件夹,如我选择的/usr/code/ssh中(这个路径后续需要用,如果你选择其它路径,后面相应要修改)
  1. cd /usr/code/ssh
  2. mkdir openssl.install
  3. mkdir zlib.install
复制代码
用于存放编译后的文件
使用如下指令解压压缩包到/usr/code/ssh中
  1. tar –zxvf  openssh-8.0p1.tar.gz
复制代码


2.编译zlib固件
  1. cd zlib-1.2.11/
复制代码
使用指令
  1. ./configure --prefix=/usr/code/ssh/zlib.install
复制代码
生成Makefile
使用
vim Makefile
增加和修改如下内容
  1. CFLAG=arm-none-linux-gnueabi-
  2. CC=$(CFLAG)gcc
  3. LDSHARED=$(CFLAG)gcc –shared……
  4. CPP=$(CFLAG)gcc
  5. AR= $(CFLAG)ar
复制代码
如果不知道如何修改,可以使用附件的Makefile,
使用
  1. make&make install
复制代码
编译完成
编译成功可以在/usr/code/ssh/zlib.install下看到3个文件夹,其中libz.so.1.2.11就是在其中的lib路径下。


3.编译openssl固件
cd openssl-1.0.2s/
使用指令
  1. ./Configure --prefix=/usr/code/ssh/openssl.install  os/compiler:arm-linux-gnueabihf-gcc
复制代码
执行指令
  1. make & make install
复制代码
编译后即可查看/usr/code/ssh/openssl.install下看到4个文件夹,即openssl的支持的库路径


4.编译openssh固件
cd openssh-8.0p1
使用指令
  1. ./configure --host=arm-linux-gnueabihf  --with-libs --with-zlib=/usr/code/ssh/zlib.install --with-ssl-dir=/usr/code/ssh/openssl.install  --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar   --without-hardening
复制代码
执行指令
  1. make
复制代码
等待编译完成即可生成编译后需要的ssh文件,不过注意此时sshd_config文件需要修改才能满足远程访问,具体修改可参考我提供的sshd_config文件


Makefile.zip

3.27 KB, 下载次数: 8

zlib修改后的makefile

回复 支持 反对

使用道具 举报

30

主题

155

帖子

0

精华

高级会员

Rank: 4

积分
768
金钱
768
注册时间
2012-6-14
在线时间
204 小时
发表于 2020-5-20 08:51:12 | 显示全部楼层
顶一个,非常感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 11:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表