SSH移植到BusyBox

手动编译SSH安装挺麻烦的,本文主要是我大量借鉴和实践总结出来的流程,一步一按照做不会有太大问题。

移植平台:IMX6UL(迅为开发板)
根文件系统:BusyBox
所有操作都建议不要在root账户下运行,并且make install的安装路径按照我的来,编译器随意。
中途编译可能会遇到缺少依赖库,每个人的情况都不一样,可以自己搜一下,解决后在按照流程继续走。

新建ssh目录,此后所有操作都在该路径下

mkdir ~/ssh
cd ~/ssh

1.zlib编译

zlib官网地址:https://www.zlib.net/fossils/
我使用的版本是:zlib-1.2.8.tar.gz
下载后将压缩包放到~/ssh,然后执行下面的命令

tar -xvf zlib-1.2.8.tar.gz
cd zlib-1.2.8/
./configure --static --prefix=~/ssh/ssh_install/zlib/

根据自己的编译器修改Makefile

vi Makefile

总共要修改四处:CC、LDSHARED、CPP、AR,其中CC最后面要加"-fPIC"

在这里插入图片描述

完成后编译安装

make
make install

没有错误的话zlib就编译完成了,可以看到多了一个目录~/ssh/ssh_install/zlib

2.openssl编译

openssl官网地址:http://distfiles.macports.org/openssl/
我使用的版本是:openssl-1.1.1c.tar.gz
下载后将压缩包放到~/ssh,然后执行下面的命令

tar -xvf openssl-1.1.1c.tar.gz
cd openssl-1.1.1c/
注意下面这条指令--prefix=/home/UserName/ssh/ssh_install/open-ssl/...其中的"UserName"要改成自己Ubuntu的账户名
./Configure linux-generic32 no-asm shared no-async --prefix=/home/UserName/ssh/ssh_install/open-ssl/ CROSS_COMPILE=arm-linux-gnueabihf- CC=gcc -fPIC

Makefile生成后编译安装

make
make install

没有错误的话zlib就编译完成了,可以看到多了一个目录~/ssh/ssh_install/open-ssl

3.openssh编译

openssh官网地址:https://ftp.riken.jp/pub/OpenBSD/OpenSSH/portable/
我使用的版本是:openssh-9.6p1.tar.gz
下载后将压缩包放到~/ssh,然后执行下面的命令

tar -vxf openssh-9.6p1.tar.gz
cd openssh-9.6p1/
注意下面这条指令有两个"UserName"改成自己Ubuntu的账户名即可
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=~/ssh/ssh_install/zlib --with-./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/UserName/ssh/ssh_install/zlib --with-ssl-dir=/home/UserName/ssh/ssh_install/open-ssl --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar

Makefile生成后编译,不用安装

make
touch pack.sh
vi pack.sh

这里参考这篇文章的Shell脚本:嵌入式Linux开发板移植SSH
打开pack.sh后,粘贴如下内容

#!/bin/bash
file_a="scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan" 
file_b="moduli ssh_config sshd_config" 
file_c="sftp-server ssh-keysign"
key="ssh_host_rsa_key ssh_host_dsa_key ssh_host_ecdsa_key ssh_host_ed25519_key" 
 
mkdir -p usr/local/bin usr/local/etc usr/libexec 
mkdir usr/sbin/
 
for i in $file_a
do
	if [ -f $i ];then
		cp $i usr/local/bin/
		echo "cp $i ok" 
	else
		echo "error:$i not exist "
        exit_script  
	fi
done
 
for i in $file_b
do
	if [ -f $i ];then
		cp $i usr/local/etc/
		echo "cp $i ok"
	else
		echo "error:$i not exist"
		exit_script
 	fi
done
 
for i in $file_c
do
    if [ -f $i ];then
        cp $i usr/libexec
        echo "cp $i ok"
    else
        echo "error:$i not exist"
        exit_script
    fi
done
 
if [ -f "sshd" ];then
	cp sshd usr/sbin/
	echo "cp sshd ok"
else
	echo "error:sshd not exist"
	exit_script
fi
 
# ssh_host_rsa_key
if [ -f "ssh_host_rsa_key" ];then
	echo "ssh_host_rsa_key exist"
	cp ssh_host_rsa_key usr/local/etc/
	echo "cp ssh_host_rsa_key ok" 
else
	ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
	cp ssh_host_rsa_key usr/local/etc/
	echo "cp ssh_host_rsa_key ok" 
fi
 
# ssh_host_dsa_key
if [ -f "ssh_host_dsa_key" ];then
	echo "ssh_host_dsa_key exist"
	cp ssh_host_dsa_key usr/local/etc/
	echo "cp ssh_host_dsa_key ok" 
else
	ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
	cp ssh_host_dsa_key usr/local/etc/
	echo "cp ssh_host_dsa_key ok" 
fi
 
# ssh_host_ecdsa_key
if [ -f "ssh_host_ecdsa_key" ];then
	echo "ssh_host_ecdsa_key exist"
	cp ssh_host_ecdsa_key usr/local/etc/
	echo "cp ssh_host_ecdsa_key ok" 
else
	ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
	cp ssh_host_ecdsa_key usr/local/etc/
	echo "cp ssh_host_ecdsa_key ok" 
fi
 
# ssh_host_ed25519_key
if [ -f "ssh_host_ed25519_key" ];then
	echo "ssh_host_ed25519_key exist"
	chmod 600 ssh_host_ed25519_key
	cp ssh_host_ed25519_key usr/local/etc/
	echo "cp ssh_host_ed25519_key ok" 
else
	ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""
	chmod 600 ssh_host_ed25519_key
	cp ssh_host_ed25519_key usr/local/etc/
	echo "cp ssh_host_ed25519_key ok" 
fi
 
tar -cjvf usr.tar.bz2 usr/*
echo "pack usr to usr.tar.bz2 ok"

关闭保存后修改运行权限,并运行,成功后移动到ssh_install,待会一起处理

chmod 777 pack.sh
./pack.sh
mv usr.tar.bz2 ~/ssh/ssh_install/

openssl和zlib打包

cd ~/ssh/ssh_install/open-ssl/
tar -cvf usr_openssl.tar.bz2 *
mv usr_openssl.tar.bz2 ../
cd ~/ssh/ssh_install/zlib/
tar -cvf usr_zlib.tar.bz2 *
mv usr_zlib.tar.bz2 ../

到这步交叉编译已经完成,现在把这三个压缩包放到开发板

开发板安装

  1. 首先确定电脑能跟开发板ping通
  2. 把刚刚那三个压缩包放到根节点下"/"
  3. 分别解压,如果嫌占用空间大的话,也可以在打包之前删掉一些,保留动态库即可。
tar -vxf usr_zlib.tar.bz2
tar -vxf usr_openssl.tar.bz2
tar -vxf usr.tar.bz2
  1. 打开/etc/init.d/rcS,在最后一行添加启动脚本
vi /etc/init.d/rcS

/usr/sbin/sshd &
  1. 重新启动开发板查看后台运行
ps

在这里插入图片描述
出现这条表示sshd成功运行

  1. 修改/usr/local/etc/sshd_config
vi /usr/local/etc/sshd_config

"#PermitRootLogin prohibit-password"
改成
"PermitRootLogin yes"

在这里插入图片描述

  1. 修改/etc/passwd,在最后一行添加
vi /etc/passwd

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  1. 如果开发板的账户没有密码,就要添加密码
passwd root

SSH连接终端

  1. 打开MobaXterm,新建连接

在这里插入图片描述

  1. 选择SSH

在这里插入图片描述

  1. 输入开发板的IP地址
    在这里插入图片描述
  2. 输入账户名和密码
    在这里插入图片描述
  3. 登录成功移植完毕
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/443736.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【FFmpeg】ffmpeg 命令行参数 ⑤ ( 使用 ffmpeg 命令提取 音视频 数据 | 保留封装格式 | 保留编码格式 | 重新编码 )

文章目录 一、使用 ffmpeg 命令提取 音视频 数据1、提取音频数据 - 保留封装格式2、提取视频数据 - 保留封装格式3、提取视频数据 - 保留编码格式4、提取视频数据 - 重新编码5、提取音频数据 - 保留编码格式6、提取音频数据 - 重新编码 一、使用 ffmpeg 命令提取 音视频 数据 1…

《2024国家自然科学基金青年基金》 相关申请注意事项解读

一 年龄计算 2004 对应 89 2005 对应 90 2006 对应 91 2007 对应 92 2008 对应 93 2009 对应 94 2010 对应 95 .。。 二 资助比例(2023) 2024年 23.13% 2023年 24% 三 2024年政策变动,只能申请3年的30万,不能像23年一样选择10-20的…

【二十九】springboot高并发示例

本章演示在springboot项目中的高并发demo,演示导致的问题,以及单机部署下的解决方案和集群部署下的解决方式以及分布式下的解决方案。 目录 一、单机模式下高并发问题 二、集群模式下高并发问题 一、单机模式下高并发问题 前提:先写一个减扣…

TI IWR6843ISK ROS驱动程序搭建

1、设备准备 1.1 硬件设备 1)TI IWR 6843 ISK 1块 2)Micro USB 数据线 1条 1.2 系统环境 1)VMware Workstation 15 Player 虚拟机 2)Ubuntu18.04 并安装有 ROS1 系统 如若没有安装 ROS 系统,可通过如下指令进行…

腾讯云轻量服务器流量用完了怎么办?停机吗?

腾讯云轻量服务器流量用完了怎么办?超额流量另外支付流量费,流量价格为0.8元/GB,会自动扣你的腾讯云余额,如果你的腾讯云账号余额不足,那么你的轻量应用服务器会面临停机,停机后外网无法访问,继…

深入了解XSS攻击:原理、防御与应对策略

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

结构体内存对齐详解

目录 结构体对齐: 为什么要进行内存对齐? 关于结构体的详解文章:C语言结构体详解_结构体变量和结构体类型举例-CSDN博客 结构体对齐: 存储的时候和当前存储的成员类型字节大小和默认对齐数比较,取小值 存在该对齐数的…

PodMan容器技术

容器 容器技术 软件应用通常依赖于运行时环境提供的系统库、配置文件或服务。传统上,软件应用的运行时环境安装 在物理主机或虚拟机上运行的操作系统中。 然后,管理员在操作系统上安装应用依赖项。 在RHEL中,诸如 RPM 等打包系统可协助管…

Docker MySQL 报 2059 错误:认证插件 ‘caching_sha2_password‘ 无法加载

使用docker部署的mysql8.0.29再使用Navicat连接myslq报错Authentication plugin ‘xxxxxxx’ cannot be loaded:XXXXXX (无法加载身份验证插件) 原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规…

嘉绩咨询:八位一体产业创新,赋能品牌新零售

探索新零售领域不断创新高峰的嘉绩咨询在今天全面展现了其“八位一体”产业创新模式,该模式旨在为新零售品牌提供全方位的赋能服务。立足于广州的企业战略导航专家,吹响了帮助中国品牌实现全球化发展的号角。 嘉绩咨询的核心业务涵盖招商教育、招商落地、…

防火墙IPSEC VPN实验

一、实验拓扑 二、实验要求 在上一个实验的基础上增加一条: 在FW5和FW3之间建立一条IPSec通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 三、实验配置 此实验是根据上一个实验拓展,所以前面的配置可以看之前的文章。 先配置FW1…

【毕业】 医药药店销售管理系统

1、引言 设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题&am…

手写简易操作系统(三)--加载Loader

前情提要 上一节我们讲了如何启动计算机,这一节我们讲如何加载内核,内核是存在于硬盘上的一段程序,要加载这段程序,那么必然需要从硬盘上读取数据,这里我们就需要使用 ATA PIO 模式 根据ATA规范,所有符合A…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

WordPress 从入门到精通【设置 WordPress】

前言:为方便演示,前几张图使用 Playground 环境截取 如果你还不会部署WordPress,请看下面的链接并使用雨云可视化构建一个WordPress站点: 超简单EP面板搭建WordPress网站教程 - 风屿岛 10 (biliwind.com) 进入仪表盘 在搭建完…

C++内存管理篇

文章目录 1. C/C内存分布2. C中的内存管理方式3. operator new和operator delete函数4. new和delete的实现原理5. 定位new表达式(placement-new) 1. C/C内存分布 C语言中,为了方便管理内存空间,将内存分成了不同的区域,每个区域管理不同的数据…

mysql-视图,创建表,存储过程,循环,判断实操命令

数据库操作命令在IDEA工具database的console命令 数据库表结构与视图 事务隔离级别RR(REPEATABLE-READ)解决不可重复读演示 mysql-RR隔离级别 -- 查询隔离级别 select transaction_isolation;-- 设置隔离级别 set session transaction isolation level …

基于Kronig-Penney能带模型的MATLAB求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Kronig-Penney能带模型的MATLAB求解与仿真.综合利用 MATLAB提供的求解常微分方程、矩阵行列式、代数表达式化简及绘图等函数 ,可使 Kronig-Penney能带模型分析…

P9238 [蓝桥杯 2023 省 A] 翻转硬币(杜教筛+莫比乌斯)

题目&#xff1a;https://www.luogu.com.cn/problem/P9238 思路&#xff1a; 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algo…