NXP

Linux交叉编译dropbear使能SSH

2019-07-12 13:16发布

       最近项目需要用到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要求输入用户名、密码的界面出来了,发现输入用户名、密码之后一直提示密码错误。可以确定的是用户名和密码是一定没有输错的。                                                                  而将dropbear前台启动: /usr/bindropbear -E -F 发现单板一直打印不存在的用户登录                     原来是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