美文网首页itop4412开发板驱动学习记录
itop4412 openssh-8.0p1移植教程

itop4412 openssh-8.0p1移植教程

作者: Jason416 | 来源:发表于2019-07-15 00:03 被阅读0次

    前言

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

    效果

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


    相互连接测试

    相关文章

      网友评论

        本文标题:itop4412 openssh-8.0p1移植教程

        本文链接:https://www.haomeiwen.com/subject/gxxwkctx.html