itop4412 openssh-8.0p1移植教程

前言

在上一篇文章 itop4412 linux驱动学习环境搭建-最小根文件系统制作与NFS挂载 中,搭建了学习驱动的环境,本文续接上篇文章,进行openssh的移植,使得以后可以远程通过ssh连接开发板,也能通过sftp上传下载文件。

编译环境

前言中的上一篇文章相同,采用ubuntu18.04 LTS + gcc-arm-linux-gnueabihf(默认7.4.0)。

源码下载

openssh依赖于zlib和openssl库,本文采用目前最新stable分支进行移植,下载如下三个源码文件:

构建

对于zlib库和openssl库都可以指定install目录,这里在构建前先创建好该目录。笔者这里目录为: /home/jason/arm-devlop/ssh/install,在ssh目录下为源码所在目录,效果如下:

jason@jason-vm:~/arm-devlop/ssh$ ls
install               openssh-8.0p1         openssl-1.1.1c.tar.gz
openssh-7.8p1.tar.gz  openssh-8.0p1.tar.gz  zlib-1.2.11
openssh-7.9p1.tar.gz  openssl-1.1.1c        zlib-1.2.11.tar.gz
jason@jason-vm:~/arm-devlop/ssh$ 

移植zlib

  1. 执行编译脚本build.sh
    这里直接贴出笔者总结的配置脚本,如下:
jason@jason-vm:~/arm-devlop/ssh/zlib-1.2.11$ cat build.sh 
#########################################################################
# File Name: build.sh
# Author: jason416
# mail: jason416@foxmail.com
# Created Time: 2019年07月14日 星期日 14时32分37秒
# License: GPL v2
#########################################################################
#!/bin/bash

export CC=arm-linux-gnueabihf-gcc
export AR=arm-linux-gnueabihf-ar
export LD=arm-linux-gnueabihf-ld
export ANLIB=arm-linux-gnueabihf-ranlib
INSTALL=/home/jason/arm-devlop/ssh/install/zlib-1.2.11

./configure --prefix=$INSTALL

echo "------------------------"
echo "end of configure"
echo "------------------------"

if [ -e Makefile ]; then
    make && make install
fi

jason@jason-vm:~/arm-devlop/ssh/zlib-1.2.11$ 
  1. 构建后文件目录
    在完成install操作后,会将生成的目标文件按Makefile里的相应规则,拷贝到install目录下,目录如下:
jason@jason-vm:~/arm-devlop/ssh/install/zlib-1.2.11$ tree
.
├── include
│   ├── zconf.h
│   └── zlib.h
├── lib
│   ├── libz.a
│   ├── libz.so -> libz.so.1.2.11
│   ├── libz.so.1 -> libz.so.1.2.11
│   ├── libz.so.1.2.11
│   └── pkgconfig
│       └── zlib.pc
└── share
    └── man
        └── man3
            └── zlib.3

6 directories, 8 files
jason@jason-vm:~/arm-devlop/ssh/install/zlib-1.2.11$ 

移植openssl

  1. 执行编译脚本build.sh

这里直接贴出笔者总结的配置脚本,如下:

jason@jason-vm:~/arm-devlop/ssh/openssl-1.1.1c$ cat build.sh 
#########################################################################
# File Name: build.sh
# Author: jason416
# mail: jason416@foxmail.com
# Created Time: 2019年07月14日 星期日 14时32分37秒
# License: GPL v2
#########################################################################
#!/bin/bash
INSTALL=/home/jason/arm-devlop/ssh/install

./Configure --prefix=$INSTALL/openssl-1.1.1c linux-armv4 --cross-compile-prefix=arm-linux-gnueabihf- --release --with-zlib-include=/home/jason/arm-devlop/ssh/install/zlib-1.2.11/include --with-zlib-lib=/home/jason/arm-devlop/ssh/install/zlib-1.2.11/lib zlib-dynamic zlib

echo "------------------------"
echo "end of configure"
echo "------------------------"

if [ -e Makefile ]; then
    make && make install
fi

jason@jason-vm:~/arm-devlop/ssh/openssl-1.1.1c$ 

  1. 构建后文件目录

在完成install操作后,会将生成的目标文件按Makefile里的相应规则,拷贝到install目录下,目录如下:

jason@jason-vm:~/arm-devlop/ssh/install/openssl-1.1.1c$ tree -L 2 
.
├── bin
│   ├── c_rehash
│   └── openssl
├── include
│   └── openssl
├── lib
│   ├── engines-1.1
│   ├── libcrypto.a
│   ├── libcrypto.so -> libcrypto.so.1.1
│   ├── libcrypto.so.1.1
│   ├── libssl.a
│   ├── libssl.so -> libssl.so.1.1
│   ├── libssl.so.1.1
│   └── pkgconfig
├── share
│   ├── doc
│   └── man
└── ssl
    ├── certs
    ├── ct_log_list.cnf
    ├── ct_log_list.cnf.dist
    ├── misc
    ├── openssl.cnf
    ├── openssl.cnf.dist
    └── private

13 directories, 12 files
jason@jason-vm:~/arm-devlop/ssh/install/openssl-1.1.1c$ 

openssh移植

构建

  1. 执行编译脚本build.sh
    这里直接贴出笔者总结的配置脚本,如下:
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cat build.sh 
#########################################################################
# File Name: build.sh
# Author: jason416
# mail: jason416@foxmail.com
# Created Time: 2019年07月14日 星期日 14时32分37秒
# License: GPL v2
#########################################################################
#!/bin/bash

export CC=arm-linux-gnueabihf-gcc
export AR=arm-linux-gnueabihf-ar
export LD=arm-linux-gnueabihf-ld
export ANLIB=arm-linux-gnueabihf-ranlib

./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=$INSTALL/zlib-1.2.11 --with-ssl-dir=$INSTALL/openssl-1.1.1c --disable-etc-default-login --with-md5-passwords HOST_OS=linux --with-ssl-engine --with-openssl LIBS="-lpthread" 

echo "------------------------"
echo "end of configure"
echo "------------------------"

if [ -e Makefile ]; then
    make
fi

jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ 

  1. 说明

针对openssh构建后,不需要执行make install操作,因为其生成的文件需要手动按照configure后的打印信息(如下)所指定目录放置。在成功构建后会打印一下信息:

OpenSSH has been configured with the following options:
                     User binaries: /usr/local/bin
                   System binaries: /usr/local/sbin
               Configuration files: /usr/local/etc
                   Askpass program: /usr/local/libexec/ssh-askpass
                      Manual pages: /usr/local/share/man/manX
                          PID file: /var/run
  Privilege separation chroot path: /var/empty
            sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
...

配置

  • 拷贝构建的openssh相关文件
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ mkdir -p ~/rootfs/usr/libexec ~/rootfs/usr/local/etc ~/rootfs/usr/local/bin ~/rootfs/usr/local/sbin
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cp scp  sftp  ssh sshd  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan ~/rootfs/usr/local/bin/
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cp sshd ~/rootfs/usr/local/sbin/
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cp moduli ssh_config sshd_config ~/rootfs/usr/local/etc/
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cp sftp-server ssh-keysign ~/rootfs/usr/libexec/
  • 拷贝前面构建的zlib和openssl库
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cp ../install/zlib-1.2.11/lib/libz.so* ~/rootfs/lib/ -a
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cp ../install/openssl-1.1.1c/lib/libcrypto.so* ~/rootfs/lib -a
jason@jason-vm:~/arm-devlop/ssh/openssh-8.0p1$ cp ../install/openssl-1.1.1c/lib/libssl.so* ~/rootfs/lib -a

注:~/rootfs为开发板挂载的最小根文件系统的/(根目录),-a参数必须指定,否则软链接在拷贝后会失效。

  • 生成开发板sshd运行所需私钥文件
    在串口终端中输入以下命令,生成秘钥和公钥文件,并设置私钥文件权限为0600(八进制,rw-------)。
[root@iTOP-4412]# mkdir -p /etc/ssh && cd /etc/ssh/
[root@iTOP-4412]# ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
[root@iTOP-4412]# ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
[root@iTOP-4412]# ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
[root@iTOP-4412]# ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
[root@iTOP-4412]# ls /etc/ssh/                                                                                                          
ssh_host_dsa_key          ssh_host_ecdsa_key.pub    ssh_host_rsa_key
ssh_host_dsa_key.pub      ssh_host_ed25519_key      ssh_host_rsa_key.pub
ssh_host_ecdsa_key        ssh_host_ed25519_key.pub
[root@iTOP-4412]# chmod 0600 ssh_host_ed25519_key ssh_host_rsa_key ssh_host_rsa_key ssh_host_dsa_key
  • 其他文件修改
  1. 修改用户组文件/etc/passwd,添加如下内容:
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  1. 修改sshd配置文件
    修改sshd_config文件为如下所示,其他内容可根据自己需要进行修改。
...

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

...
#PermitRootLogin prohibit-password
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

...
  • 为root用户添加/修改密码

ssh连接方式有两种,一种是常规的用户名+密码形式,另一种是用ssh-keygen生成的.pub公钥,这里只介绍常规方式。

[root@iTOP-4412]# passwd                                                                                                                           
Changing password for root
New password: 
Bad password: too short
Retype password: 
passwd: password for root changed by root
[root@iTOP-4412]# 
  • 设置sshd为自启动

在/etc/init.d/rcS中最后一行添加如下命令:

/usr/local/sbin/sshd

效果

在成功完成上述配置后,便可以用开发机连接开发板,也可用开发板连接开发机,如下图所示:


相互连接测试
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容