• 交叉编译ssh服务到ARM开发板


    遇到的问题

    在同一个局域网下,ubuntu linux开发板ping 通,但是 scp 传文件到开发板失败了,提示ssh remote_ip **** lose connection connection timeout

    原因在于开发板上板子没有启动 sshd 这个服务 ,不然连不上的,然后发现板子上并没有sshd
    因此需要交叉编译ssh服务到开发板上才能使用相关应用,这篇博客浅浅记录一下整个过程,一站式脚本用的也更得心应手了

    编译环境

    1. Ubuntu16.04 x86_64
    2. 交叉编译工具arm-linux-gnueabihf
    3. 板子ZYNQ7010,ARM平台 cortexa9

    准备编译

    以下均采用脚本进行编译,可自行根据脚本 download_package () 中的下载地址下载包并存放在 compressed 目录中,如图

    在这里插入图片描述

    开始编译

    在一个空目录下新建一个脚本 ,如auto_compile.sh ,写入以下内容

    #!/bin/sh
    
    BASE=`pwd`
    BUILD_HOST=arm-linux-gnueabihf
    OUTPUT_PATH=${BASE}/arm_install
    
    make_dirs () {
        cd ${BASE} && mkdir compressed arm_install source -p
    }
    
    download_package () {
        cd ${BASE}/compressed
        wget https://www.zlib.net/fossils/zlib-1.2.12.tar.gz
        wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
        wget http://ftp5.usa.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.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
    }
    
    set_env () {
        source /opt/pkg/petalinux/2018.3/settings.sh
    }
    
    make_zlib () {
        cd ${BASE}/source/zlib*
    
        ./configure --prefix=${OUTPUT_PATH}/zlib
    
        #Makefile 中的gcc和ar替换成自己的
        sed -i '19,19s/gcc/arm-linux-gnueabihf-gcc/g' Makefile
        sed -i '30,30s/gcc/arm-linux-gnueabihf-gcc/g' Makefile
        sed -i '31,31s/gcc/arm-linux-gnueabihf-gcc/g' Makefile
        sed -i '39,39s/ar/arm-linux-gnueabihf-ar/g' Makefile
    
        make -j8 && make install
    }
    
    make_openssl () {
        cd ${BASE}/source/openssl*
    
        ./config shared no-asm \
        --prefix=${OUTPUT_PATH}/openssl \
        --openssldir=${BASE}/source/openssl-1.1.1q/ssl
    
        #CROSS_COMPILE= 添加 arm-linux-gnueabihf-
        sed -i '92,92s/CROSS_COMPILE=/CROSS_COMPILE=arm-linux-gnueabihf-/g' Makefile
        #去掉 -m64 标签,否则会报错
        sed -i '126,126s/-m64//g' Makefile
        sed -i '127,127s/-m64//g' Makefile
        sed -i '129,129s/-m64//g' Makefile
    
        make -j8 && make install
    }
    
    make_openssh () {
        cd ${BASE}/source/openssh*
    
        ./configure --host=arm-linux \
        --with-zlib=${OUTPUT_PATH}/zlib \
        --with-ssl-dir=${OUTPUT_PATH}/openssl \
        --disable-etc-default-login --disable-strip \
        CC=${BUILD_HOST}-gcc \
        AR=${BUILD_HOST}-ar
    
        make -j8
    }
    
    make_dirs
    set_env
    tar_package
    make_zlib
    make_openssl
    make_openssh
    

    移植到开发板

    1.新建目录

    查看开发板上有没有以下目录,若没有,则新建:

    /usr/local/bin/ 
    /usr/local/sbin/ 
    /usr/local/etc/ 
    /usr/local/libexec/ 
    /var/run/ 
    /var/empty/
    

    2.拷贝文件

    cd **/source/openssh-9.0p1
    
    sudo cp scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan /media/hammer/rootfs/usr/local/bin
    sudo cp moduli ssh_config sshd_config /media/hammer/rootfs/usr/local/etc
    sudo cp sftp-server  ssh-keysign /media/hammer/rootfs/usr/local/libexec
    sudo cp sshd /media/hammer/rootfs/usr/local/sbin/
    
    sync
    

    3.生成key文件

    cd **/source/openssh-9.0p1
    
    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 ""
    
    sudo cp ssh_host_*_key /media/hammer/rootfs/usr/local/etc/
    

    4.修改开发板passwd文件

    sudo vi /etc/passwd
    #在最后添加一行
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    

    上板测试

    ssh root@remote_ip
    scp file root@remote_folder
    

    参考博客

    arm交叉编译 sshd服务

  • 相关阅读:
    ESP8266-Arduino编程实例-ADC
    JAVA集合,TreeMap排序
    AI问答-ERP:理解 ERP / 我国ERP发展现状 / ERP软件有哪些 / 华为自研ERP
    Git: tag管理
    Redis常用数据类型
    swift界面初体验
    windows平台goldgate同步oracle数据库
    Java的抢占式调度
    JDK1.8 新特性(二)【Stream 流】
    python实现图像添加噪声、噪声处理、滤波器代码实现
  • 原文地址:https://blog.csdn.net/qq_41873311/article/details/126968353