Linux交叉编译dropbear使能SSH

       最近项目需要用到armv8 cpu的嵌入式精简的文件系统,但是busybox生成的文件系统只支持telnet,不支持ssh连接,而openssh的库又很大,不符合精简文件系统,想到了轻量级的dropbear,下面就编译dropbear的步骤和遇到的问题进行一下说明。

 

编译准备:

目标环境: NXP的armv8

交叉编译链:aarch64-fsl-linux-gcc

工具下载: dropbear-2016.74.tar.bz2

                   地址:http://matt.ucc.asn.au/dropbear/releases/

涉及到的lib库:

                  libz.so.1.2.8、libutil-2.20-2014.11.so、libcrypt-2.20-2014.11.so

           由于本人交叉编译链已经有相应的库,这里就不在对相应库的交叉编译进行说明了,如果交叉编译链中没有以上库请先自行编译。

 

编译dropbear

将dropbear-2016.74.tar.bz2放到/home/freescale/test,解压缩dropbear

 tar -xvf dropbear-2016.74.tar.bz2

进入dropbear目录,配置dropbear                 

cd dropbear-2016.74

./configure --prefix=/home/freescale/test/build/dropbear

修改生成的Makefile                 

CC=aarch64-fsl-linux-gcc(根据所使用的交叉工具链修改)

AR=aarch64-fsl-linux-ar

RANLIB=aarch64-fsl-linux-ranlib

编译并安装

make

make scp

make install

拷贝scp到安装目录

cp scp /home/freescale/test/build/dropbear/bin

strip所有的可执行文件             

aarch64-fsl-linux-strip /home/freescale/test/build/dropbear/bin/*

aarch64-fsl-linux-strip /home/freescale/test/build/dropbear/sbin/*

         把所有bin目录和sbin目录文件拷贝到精简文件系统对应的bin和sbin目录中,拷贝上述涉及到的lib库到精简文件系统的lib目录,创建dropbear配置目录,并生成密钥

mkdir /etc/dropbear

cd /etc/dropbear

dropbearkey -t rsa -f dropbear_rsa_host_key

dropbearkey -t dss -f dropbear_dss_host_key

ln -s /bin/dbclient /bin/ssh

ln -s /lib/libz.so.1.2.8 /lib/libz.so.1

ln -s /lib/libutil-2.20-2014.11.so /lib/libutil.so.1

ln -s /lib/libcrypt-2.20-2014.11.so /lib/libcrypt.so.1

dropbear即为服务端,dbclient即为客户端,添加系统启动服务

vi /etc/init.d/rcS

添加

/usr/sbin/dropbear

到此处dropbear准备工作已经完毕,重启系统后,用PC通过ssh远程登录

 

问题:

如果是正常文件系统应该不会出现问题,但是笔者是自己做的精简文件系统,用ssh登录后,ssh要求输入用户名、密码的界面出来了,发现输入用户名、密码之后一直提示密码错误。可以确定的是用户名和密码是一定没有输错的。

                                                            Linux交叉编译dropbear使能SSH_第1张图片

 

 

而将dropbear前台启动: /usr/bindropbear -E -F 发现单板一直打印不存在的用户登录

                 Linux交叉编译dropbear使能SSH_第2张图片

 

原来是linux认证搞得鬼,此问题需要两个文件:

  • 一个是需要/etc/shells,shells必须指定passwd中指定的shell。
vi /etc/shells

添加

/bin/sh

/bin/bash

/bin/bash64

/bin/ash

/bin/bsh

/bin/tcsh

/bin/csh

/bin/ksh

/bin/zsh
  • 一个是缺少库文件libnss_files-2.20-2014.11.so,虽然dropbear运行不需要此库,但是登录ssh用户验证和密码验证是需要用到此库来读取/etc/passwd和/etc/shadow文件,所以还需要把libnss_files-2.20-2014.11.so添加到文件系统的lib目录中。
ln -s /lib/libnss_files-2.20-2014.11.so /lib/libnss_files.so.2

此问题的详细说明请参考:

                    https://blog.csdn.net/force_eagle/article/details/4508978

Show下xz压缩后的ext4 ramdisk精简文件系统大小:仅有2.6M

                                                                   Linux交叉编译dropbear使能SSH_第3张图片

你可能感兴趣的:(linux,嵌入式,dropbear,linux,交叉编译)