Arm-Linux 移植 ssh
背景:
自己拥有一块开发板,但是苦于上面没有ssh,比较不方便。正好趁这个机会,移植ssh。我们使用的ssh是openssh。
##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
# File Name: make.sh
# Created : Sat Nov :: PM CST
##
#!/bin/sh
BUILD_HOST=arm-hisiv500-linux
ARM_GCC=${BUILD_HOST}-gcc
BASE=`pwd`
OUTPUT_PATH=${BASE}/install
ZLIB=zlib-
OPENSSL=openssl-1.0.2t
OPENSSH=openssh-.6p1
FIN_INSTALL=/usr/${OPENSSH}
make_dirs () {
#为了方便管理,创建有关的目录
cd ${BASE} && mkdir compressed install source -p
}
download_package () {
cd ${BASE}/compressed
#下载包
wget -c https://www.zlib.net/${ZLIB}.tar.gz
wget https://www.openssl.org/source/${OPENSSL}.tar.gz
wget -c http://mirrors.mit.edu/pub/OpenBSD/OpenSSH/portable/${OPENSSH}.tar.gz
}
tar_package () {
cd ${BASE}/compressed
ls * > /tmp/list.txt
for TAR in `cat /tmp/list.txt`
do
tar -xf $TAR -C ../source
done
rm -rf /tmp/list.txt
}
make_zlib () {
# 编译安装 zlib
cd ${BASE}/source/${ZLIB}
echo "ZLIB ABOUT"
CC=${ARM_GCC} ./configure --prefix=${OUTPUT_PATH}/${ZLIB}
make && make install
}
pre_make_ssl () {
cd ${BASE}/source/${OPENSSL}
startLine=`sed -n '/install_html_docs\:/=' Makefile`
echo $startLine
# 为了避免 多行结果
for startline in $startLine
do
lineAfter=
endLine=``
sed -i $startline','$endLine'd' Makefile
echo "install_html_docs:" >> Makefile
echo "\t@echo skip by Schips" >> Makefile
echo "install_docs:" >> Makefile
echo "\t@echo skip by Schips" >> Makefile
echo "# DO NOT DELETE THIS LINE -- make depend depends on it." >> Makefile
break
done
}
make_ssl () {
# 编译安装 zlib
cd ${BASE}/source/${OPENSSL}
echo "SSL ABOUT"
./Configure --prefix=${OUTPUT_PATH}/${OPENSSL} os/compiler:${ARM_GCC}
#sudo mv /usr/bin/pod2man /usr/bin/pod2man_bak
#mv doc/apps /tmp/
pre_make_ssl
make && make install
}
do_copy () {
cd ${BASE}/source/${OPENSSH}
mkdir ${OUTPUT_PATH}/${OPENSSH}/bin -p
mkdir ${OUTPUT_PATH}/${OPENSSH}/sbin -p
mkdir ${OUTPUT_PATH}/${OPENSSH}/etc -p
mkdir ${OUTPUT_PATH}/${OPENSSH}/libexec -p
cp scp sftp ssh ssh-add ssh-agent \
ssh-keygen ssh-keyscan ${OUTPUT_PATH}/${OPENSSH}/bin
cp moduli ssh_config sshd_config ${OUTPUT_PATH}/${OPENSSH}/etc
cp sftp-server ssh-keysign ${OUTPUT_PATH}/${OPENSSH}/libexec
cp sshd ${OUTPUT_PATH}/${OPENSSH}/sbin
#scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 拷贝到目标板/usr/local/bin
#moduli ssh_config sshd_config拷贝到目标板 /usr/local/etc
#sftp-server ssh-keysign 拷贝到目标板 /usr/local/libexec
#sshd 拷贝到目标板 /usr/local/sbin/
}
make_key () {
cd ${BASE}/source/${OPENSSH}
ssh-keygen -t rsa -f ssh_host_key -N ""
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
#将生成的 ssh_host_*_key这4个文件copy到目标板的 /usr/local/etc/目录下
cp ssh_host*key ${OUTPUT_PATH}/${OPENSSH}/etc
}
make_ssh () {
cd ${BASE}/source/${OPENSSH}
./configure \
--host=${BUILD_HOST} \
--with-libs --with-zlib=${OUTPUT_PATH}/${ZLIB} \
--with-ssl-dir=${OUTPUT_PATH}/${OPENSSL} \
--disable-etc-default-login \
CC=${BUILD_HOST}-gcc \
AR=${BUILD_HOST}-ar
make -j4 # 不需要 install
}
make_dirs
sudo ls
download_package
tar_package
make_zlib
make_ssl
make_ssh
do_copy
make_key
exit $?
开发板准备:
新建以下目录
mkdir -p /usr/local/bin/ mkdir -p /usr/local/sbin/ mkdir -p /usr/local/etc/ mkdir -p /usr/local/libexec/ mkdir -p /var/run/ mkdir -p /var/empty/
拷贝:
从PC机上将以下文件拷贝到目标板Linux系统中
PC机 ssh/source/openssh-4.6p1/ 目录下的
- scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 拷贝到目标板/usr/local/bin
- moduli ssh_config sshd_config拷贝到目标板 /usr/local/etc
- sftp-server ssh-keysign 拷贝到目标板 /usr/local/libexec
- sshd 拷贝到目标板 /usr/local/sbin/
生成Key文件
在PC机 ssh/source/openssh-4.6p1/ 目录下运行:
ssh-keygen -t rsa -f ssh_host_key -N "" ssh-keygen -t rsa -f ssh_host_rsa_key -N "" ssh-keygen -t dsa -f ssh_host_dsa_key -N "" ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
将生成的 ssh_host_*_key这4个文件copy到目标板的 /usr/local/etc/目录下
修改目标板passwd文件
在/etc/passwd 中添加下面这一行 “ sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin ”
cp /etc/passwd /etc/passwd_bak echo "sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin" >> /etc/passwd
此后,只需要运行一次 /usr/local/sbin/sshd 此后即可使用远程登录
如果开发板的 root 用户还没有密码,键入以下命令然输入两次密码来修改,否则其他设备无法连接:
passwd root
如果连接不上,请直接运行 /usr/local/sbin/sshd 查看是什么原因
- 有提示 动态链接库 找不到的(工具链的动态链接库)
- 有提示 ssh_host 文件找不到的 生成即可
开发板设置开机自启动ssh:
#! /bin/sh
sshd=/usr/local/sbin/sshd
test -x
case "$1" in
start)
echo -n "Starting sshd daemon"
start-stop-daemon --start --quiet --exec $sshd -b
echo "."
;;
stop)
echo -n "Stopping sshd"
start-stop-daemon --stop --quiet --exec $sshd
echo "."
;;
restart)
echo -n "Stopping sshd"
start-stop-daemon --stop --quiet --exec $sshd
echo "."
echo -n "Waiting for sshd to die off"
;
do
echo -n "."
done
echo ""
echo -n "Starting sshd daemon"
start-stop-daemon --start --quiet --exec $sshd -b
echo "."
;;
*)
echo "Usage: /etc/init.d/sshd {start|stop|restart}"
exit
esac
exit
Arm-Linux 移植 ssh的更多相关文章
- arm linux 移植 x265
背景 本来想着把 x265编译到ffmpeg里面,搞定了x265的编译:但是一直报ERROR: x265 not found using pkg-config这个错误,我按照网上的资料,查看了ffbu ...
- Linux 安装 go 以及 arm linux 移植 go
背景 Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. 从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码 ...
- arm linux 移植 MQTT (paho、mosquitto)
前言 我们在这里做2件事情: 1)编译 paho.mqtt.mosquitto 2个开源项目的c版本库(mosquitto库没有用上) 2)编译好 依赖 paho.mqtt的库编写例程 + mosqu ...
- arm linux 移植 ffmpeg 库 + x264
背景 Ffmpeg 中带有h264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264. ...
- arm linux 移植 PHP
背景: PHP 是世界上最好的语言. host平台 :Ubuntu 16.04 arm平台 : 3531d arm-gcc :4.9.4 php :7.1.30 zlib :1.2.11 libxml ...
- arm linux 移植支持 HP打印机
背景 由于业务需要,需要hi3531d主板上加入对于HP打印机的支持. 通过与产品经理,技术主管的沟通:通用支持是不现实的,只要求彩色打印,先不考虑打印机的价格,只要支持一款打印机即可. 注意: Li ...
- arm linux 移植 gdb/gdbserver
背景 调试工具gdb的使用对于嵌入式Linux开发人员来说是一项不可少的技能. 目前,嵌入式 Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机 ...
- arm linux 移植 udhcp 与 使用
背景 在一些网络环境下,需要静态IP不够现实,需要使用DHCP进行自动获取IP地址. udhcpc是一个面向嵌入式系统的非常小的DHCP客户端,字母的缩写微μ- DHCP -客户端client(μDH ...
- arm linux 移植 rsync
背景: 在产品开发中可以使用rsync进行大文件的拷贝,断点续传. host平台 :Ubuntu 16.04 arm平台 : 3531d rsync :3.1.3 arm-gcc :4.9.4 ...
- arm linux 移植 jpeg
背景: host平台 :Ubuntu 16.04 arm平台 : S5P6818 jpeg :v9c arm-gcc :4.8.1 主机准备: 运行以下脚本: ## # Copyright By Sc ...
随机推荐
- essential
essential - 必应词典 美[ɪ'senʃ(ə)l]英[ɪ'senʃ(ə)l] n.要点:要素:实质:必需品 adj.完全必要的:必不可少的:极其重要的:本质的 网络基本的:必需的 变形复数: ...
- lnmp新增https访问【转】
环境是使用lnmp一键安装包搭建的: 1 首先去这个网站下载证书:免费ssl证书 最终会得到两个文件 2:在/usr/local/nginx/conf创建cert目录把这两个文件放进去,这个地址后面有 ...
- Unexpected token o in JSON at position 1 报错原因
写在前面的话这个问题在之前做项目时碰到过一次,当时按照网上的做法,去掉JSON.parse()这一层转换后就没有这个报错了,数据也能正常使用,就没多想,也没深究是什么原因. 可是这次又碰到了,所以这次 ...
- The difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data
重构:改善饿了么交易系统的设计思路 原创: 盛赫 阿里巴巴中间件 昨天
- flutter 保持页面状态
import 'package:flutter/material.dart'; import 'KeepAliveDemo.dart'; void main() => runApp(MyApp( ...
- 开源配置中心xxl-conf的核心原理分析
XXL-CONF是一款轻量级的开源配置中心项目,由国内大牛许雪里开发.下面是官方对其优点作出的描述: 一个轻量级分布式配置管理平台,拥有"轻量级.秒级动态推送.多环境.跨语言.跨机房.配置监 ...
- (待续)【转载】 DeepMind发Nature子刊:通过元强化学习重新理解多巴胺
原文地址: http://www.dataguru.cn/article-13548-1.html -------------------------------------------------- ...
- Spring cloud微服务安全实战-6-8sentinel限流实战
阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...
- python中多层循环的一键退出
在单层循环的退出中,使用break即能退出,那么多层循环呢?机智的人们使用flag标识符的方式,例如: a=['a',1,2,3,4] b=['b',1,2,3,4] c=['c',1,2,3,4] ...
- spring 配置事务管理器
在Spring中数据库事务是通过PlatformTransactionManager进行管理的,jdbcTemplate是不能支持事务的,而能够支持事务的是org.springframework.tr ...