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
doif [ -f $i ];thencp $i usr/local/bin/echo "cp $i ok" elseecho "error:$i not exist "exit_script  fi
donefor i in $file_b
doif [ -f $i ];thencp $i usr/local/etc/echo "cp $i ok"elseecho "error:$i not exist"exit_scriptfi
donefor i in $file_c
doif [ -f $i ];thencp $i usr/libexececho "cp $i ok"elseecho "error:$i not exist"exit_scriptfi
doneif [ -f "sshd" ];thencp sshd usr/sbin/echo "cp sshd ok"
elseecho "error:sshd not exist"exit_script
fi# ssh_host_rsa_key
if [ -f "ssh_host_rsa_key" ];thenecho "ssh_host_rsa_key exist"cp ssh_host_rsa_key usr/local/etc/echo "cp ssh_host_rsa_key ok" 
elsessh-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" ];thenecho "ssh_host_dsa_key exist"cp ssh_host_dsa_key usr/local/etc/echo "cp ssh_host_dsa_key ok" 
elsessh-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" ];thenecho "ssh_host_ecdsa_key exist"cp ssh_host_ecdsa_key usr/local/etc/echo "cp ssh_host_ecdsa_key ok" 
elsessh-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" ];thenecho "ssh_host_ed25519_key exist"chmod 600 ssh_host_ed25519_keycp ssh_host_ed25519_key usr/local/etc/echo "cp ssh_host_ed25519_key ok" 
elsessh-keygen -t dsa -f ssh_host_ed25519_key -N ""chmod 600 ssh_host_ed25519_keycp ssh_host_ed25519_key usr/local/etc/echo "cp ssh_host_ed25519_key ok" 
fitar -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/passwdsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  1. 如果开发板的账户没有密码,就要添加密码
passwd root

SSH连接终端

  1. 打开MobaXterm,新建连接

在这里插入图片描述

  1. 选择SSH

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 Python 目录: (一)装饰器函数 (二)牛客网—软件开发-Python专项练习 (三)装饰器函数 (四&#xff0…

【深度学习】自动求导中有时为什么要先sum()再backward()

创作日志: 在看李沐学深度学习,“深度学习中,我们的目的不是计算微分矩阵,而是批量中每个样本单独计算的偏导数之和”,对这句话一知半解,自己动手推导一下。 一、理解 在深度学习中,被求导的对…

CSS的盒子模型:掌握网页设计的基石!

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

Linux的进程调度实现

经常被问到进程的调度算法有哪些,什么先进先出、短进程优先、时间片轮转、多级反馈多列等等算法能说一大堆?那具体的,linux内核使用了什么样的算法,且来探究一下。 本文所引用源码基于linux内核2.6.34版本。 目录 调度器类 从 s…

探索 PostgreSQL 的高级数据类型 - 第 1 部分

数组和枚举 PostgreSQL 因其可扩展性和多功能性而备受欢迎,除了传统的整数和字符串之外,它还提供了多种数据类型。其中,包括数组和枚举,其为开发者提供了高级的数据建模能力。本文中,我们将深入研究这些复杂的数据类型…

Unity中PICO实现 隔空取物 和 接触抓取物体

文章目录 前言一、隔空取物1、XR Grab Interactable2、调节扔出去时的相关系数3、用手柄射线指向需要抓取的物体后,按下侧边扳机键即可抓取 二、接触抓取物体1、替换手柄上抓取物体的脚本2、在手柄上添加 接触抓取物体的脚本3、在手柄上添加碰撞盒触发器4、在需要抓…

PHAMB: 病毒数据分箱

Genome binning of viral entities from bulk metagenomics data | Nature Communications 安装 ### New dependencies *Recommended* conda install -c conda-forge mamba mamba create -n phamb python3.9 conda activate phamb mamba install -c conda-forge -c biocond…

IOS降级后从高版本到低版本恢复备份

IOS降级后从高版本到低版本恢复备份 此方法只适用于小版本还原,比如17.4->17.3,未验证大版本恢复可行性手机型号:iphone 13pro 系统版本:17.4 降级版本:17.3.1 步骤 通过itunes或者MacOS系统下对当前版本进行备份…

基于ThinkPHP框架的校园一卡通系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 框架技术 3 1.1.1 Bootstrap 3 1.1.2 ThinkPHP框架 3 1.2 前端技术 4 1.2.1 JavaScript 4 1.2.2 ECharts 4 1.3 B/S架构 4 1.4 数据库技术 5 1.4.1 MySQL 5 1.5 本章小结 6 2 系统分析 7 2.1 功能需求分析 7 2.2 非功能需…

202441读书笔记|《笠翁对韵》—— 金菡萏,玉芙蓉,酒晕微酡琼杏颊,香尘浅印玉莲双

202441读书笔记|《笠翁对韵》——金菡萏,玉芙蓉,酒晕微酡琼杏颊,香尘浅印玉莲双 《作家榜名著:笠翁对韵》作者李渔,霍俊明。是所有词句都有注音的一本书,轻松学不认识的字,非常朗朗上口的对偶词…

PromptBreeder---针对特定领域演化和发展提示词的方法

原文地址:promptbreeder-evolves-adapts-prompts-for-a-given-domain 论文地址:https://arxiv.org/pdf/2309.16797.pdf 2023 年 10 月 6 日 提示方法分为两大类 硬提示是由人工精心设计的文本提示,包含离散的输入令牌;其缺点…

【Linux】gcc与make、makefile

文章目录 1 gcc/g1.1 预处理1.2 编译1.3 汇编1.4 链接1.4.1 静态链接1.4.2 动态链接 2 make和makefile2.1 依赖关系2.2 依赖方法2.3 伪目标 3 总结 1 gcc/g 当我们创建一个文件,并向里面写入代码,此时,我们该如何使我们的代码能够运行起来呢&…

html--心花怒放

代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Canvas 绘制一个❤</title><link rel"shortcut icon" href"../../assets/images/icon/favicon.ico" type"ima…

C#实现快速排序算法

C#实现快速排序算法 以下是C#中的快速排序算法实现示例&#xff1a; using System;class QuickSort {// 快速排序入口函数public static void Sort(int[] array){QuickSortRecursive(array, 0, array.Length - 1);}// 递归函数实现快速排序private static void QuickSortRecu…

ubuntu自带屏幕截图功能

目录 简介开始截屏步骤1.打开截屏软件2.选择区域3.截图 快捷键 录屏方法11.开始录屏2.停止录屏 方法2 补充说明 简介 试了好多开源跨平台截图软件&#xff0c;但是在ubuntu上都或多或少存在问题。ubuntu有自带的截图软件。打算把ubuntu自带的截图软件用起来。 顺便说一下我使…

B端系统升级,登录页必在升级之列,不容置疑。

进行B端界面升级时&#xff0c;首先升级登录页有以下几个原因&#xff1a; 用户体验&#xff1a;登录页是用户进入系统的第一个页面&#xff0c;用户首先接触到的界面。通过升级登录页&#xff0c;可以提升用户的第一印象&#xff0c;增强用户对系统的信任感和好感度&#xff…

Android Studio编译及调试知识

文章目录 Android Studio编译kotlin项目Android Studio编译Java和kotlin混合项目的过程gradle打印详细错误信息&#xff0c;类似这种工具的使用Android apk 从你的代码到APK打包的过程&#xff0c;APK安装到你的Android手机上的过程&#xff0c;最后安装好的形态&#xff0c;以…

简单形状点云轮廓点排序(旋转角)

1、背景介绍 很多边缘提取算法提取的边缘点为无序点云&#xff0c;如下图所示&#xff0c;无序点云不利于后续各种应用&#xff0c;比如根据边缘计算点云面积、点云轮廓线规则化等。若对点云进行排序&#xff0c;则可以进行上述引用。但实际上&#xff0c;点云形状错综复杂&…

Dubbo 和 Zookeeper 的关系

Dubbo 和 Zookeeper 的关系 Zookeeper的作用 zookeeper用来注册服务和进行负载均衡&#xff0c;哪一个服务由哪一个机器来提供必需让调用者知道&#xff0c;简 单来说就是ip地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方 业务代码中实现&#…

AVL树讲解

AVL树 1. 概念2. AVL节点的定义3. AVL树插入3.1 旋转 4.AVL树的验证 1. 概念 AVL树是一种自平衡二叉搜索树。它的每个节点的左子树和右子树的高度差&#xff08;平衡因子&#xff0c;我们这里按右子树高度减左子树高度&#xff09;的绝对值不超过1。AVL的左子树和右子树都是AV…