itop4412开发板驱动学习记录

itop4412 openssh-8.0p1移植教程

2019-07-15  本文已影响0人  Jason416

前言

在上一篇文章 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
...

配置

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/
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参数必须指定,否则软链接在拷贝后会失效。

[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

...

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]# 

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

/usr/local/sbin/sshd

效果

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


相互连接测试
上一篇下一篇

猜你喜欢

热点阅读