当前位置: 首页 > 工具软件 > dropbear > 使用案例 >

移植dropbear到开发板

汪玮
2023-12-01

添加dropbear功能

介绍

由于OpenSSH因为其相对较大,一般不太适用于嵌入式平台,多用于PC或者服务器的Linux版本中。而Dropbear是由Matt Johnston所开发的Secure Shell软件(包括服务器端与客户端)。期望在存储器与运算能力有限的情况下取代OpenSSH,Dropbear特别用于“嵌入”式的Linux(或其他Unix)系统,如无线路由器。

配置编译dropbear

由于dropbear依赖zlib的库所以在编译dropbear之前需要先编译zlib

(1)编译zlib

$ tar -xvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure --prefix=/home1/out/zlib

(2)修改生成的Makefile

CC=powerpc-none-linux-gnuspe-gcc
LDSHARED=powerpc-none-linux-gnuspe-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
CPP=powerpc-none-linux-gnuspe-gcc -E
AR=powerpc-none-linux-gnuspe-ar
RANLIB=powerpc-none-linux-gnuspe-ranlib

修改后进行make和make install

(3)编译dropbear

​ 编译之前我们需要先修改下dropbear的源码,由于后期我们需要给dropbear添加sftp-server ,但是dropbear的模式访问sftp-server的路径是/usr/libexec,也就是说后期编译生成的sftp-server必须放到这个目录dropbear才访问的到,但是目前项目的这个usr目录都被用来存放业务的代码了,所以现在必须将其默认路径修改掉

diff --git a/dropbear-2018.76-m/default_options.h b/dropbear-2018.76-m/default_options.h
index 86fb25a1..f8bb9218 100755
--- a/dropbear-2018.76-m/default_options.h
+++ b/dropbear-2018.76-m/default_options.h
@@ -250,7 +250,7 @@ Homedir is prepended unless path begins with / */
  * OpenSSH), set the path below and set DROPBEAR_SFTPSERVER.
  * The sftp-server program is not provided by Dropbear itself */
 #define DROPBEAR_SFTPSERVER 1
-#define SFTPSERVER_PATH "/usr/libexec/sftp-server"
+#define SFTPSERVER_PATH "/bin/sftp-server"

 /* This is used by the scp binary when used as a client binary. If you're
  * not using the Dropbear client, you'll need to change it */
diff --git a/dropbear-2018.76-m/default_options_guard.h b/dropbear-2018.76-m/default_options_guard.h
old mode 100755
new mode 100644
index 77cae78c..858d8f19
--- a/dropbear-2018.76-m/default_options_guard.h
+++ b/dropbear-2018.76-m/default_options_guard.h
@@ -385,7 +385,7 @@ Homedir is prepended unless path begins with / */
 #define DROPBEAR_SFTPSERVER 1
 #endif
 #ifndef SFTPSERVER_PATH
-#define SFTPSERVER_PATH "/usr/libexec/sftp-server"
+#define SFTPSERVER_PATH "/bin/sftp-server"
 #endif

将这两个文件下的默认宏定义路径修改了

$ ./configure CC=powerpc-none-linux-gnuspe-gcc --host=powerpc-none-linux-gnuspe --prefix=/home1/out/dropbear/ --with-zlib=/home1/out/zlib
$ make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
$ make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

–with-zlib : 指定依赖的库文件存放路径

–prefix :指定安装路径

(4)移植进开发板

将dropbear编译安装生成的文件放入开发板中

$ cd /home1/out/dropbear/
$ cp bin/* sbin/*  /home1/rootfs/bin

在开发板上进行操作

$ cd /etc/
$ mkdir dropbear		# dropbear 默认访问ssh钥 路径
$ dropbearkey -t rsa -f dropbear_rsa_host_key
$ dropbearkey -t dss -f dropbear_dss_host_key

会在改目录下生成两个ssh 公钥文件 将其复制到根文件系统同目录下,这样就不需要每个新板子都执行以上操作,文件权限为600

注意:记得将依赖库一并放入开发板中

$ powerpc-none-linux-gnuspe-readelf -d 文件命		# 查看文件依赖库
$ cp -L 文件命		# 保证文件链接属性复制

(5)测试

将其烧录到开发板子,执行以下操作

# 执行dropbear
$ dropbear &	

# 查看是否有dropbear默认端口为22
$ netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 :::22                   :::*                    LISTEN      1477/dropbear

# 是用ssh 测试是否能够登陆
$ ssh 用户名@ip
$ passwd

添加sftp-server功能

介绍

在板子内添加dropbear后虽然可以使用ssh登陆开发板了,但是dropbear本身不支持使用sftp上传和下载文件,需要给dropbear添加sftp-server,sftp-server是属于openSSH里的一个功能,所以我们需要编译oenSSH

配置编译openSSH

由于openSSH依赖zlib和openSSL库我们需要先编译这两个

(1)编译openSSL

$ ./config no-asm shared --prfix=/home1/out/openssl/ 

no-asm : 表示在交叉编译过程中不适用汇编代码加速编译过程,原因是它的汇编代码对arm格式的不支持

shared : 表示编译生成动态库由于我们主要是为了编译openSSH,而openSSH依赖openSSL的动态库如果使用了静态编译那么在编译openSSH的时候就会由于找不到动态库而报错

(2)修改Makefile

CROSS_COMPILE=powerpc-none-linux-gnuspe-
# 删除makefile中所有的 -m64

之后进行 make 和 make install

(3)编译openSSH

$ ./configure CC=powerpc-none-linux-gnuspe-gcc --with-libs  --host=powerpc-none-linux-gnuspe --prefix=/home1/out/openssh/ --with-zlib=/home1/out/zlib --disable-etc-default-login  --with-ssl-dir=/home1/openssl/openssl-1.1.1m
$ make sftp-server		# 我们只需要编译sftp-server,不需要make install
$ cp sftp-server /home1/rootfs/bin

(4)移动文件到跟文件系统

由于在编译安装dropbear的时候将其关于sftp-server的默认路径修改成立/bin/sftp-server 所以我们需要将编译出来的sftp-server移动到改目录下,并保证依赖库都移植到了开发板中

$ powerpc-none-linux-gnuspe-readelf -d sftp-server 		# 查看依赖库

(5)在开发板中加入开启自启动脚本

$ vi /etc/init.d/rcS
#!/bin/sh

#Run general init for all platforms
[ -x /etc/init.d/common.sh ] && . /etc/init.d/common.sh

#Run platform-related init
#[ -x /etc/init.d/platform.sh ] && /etc/init.d/platform.sh

#Try to run app,must run background,so init can run inetd.
if [ -f /etc/scripts/start.sh ]; then
#       chmod 777 /etc/scripts/start.sh
        /etc/scripts/start.sh &
else
        echo "Can't find /etc/scripts/start.sh!"
fi

if [ -f /etc/init.d/sftp.sh ]; then    # 添加sftp的开启脚本

        /etc/init.d/sftp.sh &
else
        echo "Can't find /etc/init.d/sftp.sh!"
fi
$ vi sftp.sh

#!/bin/sh

base=dropbear

$base

这样每次开机就会自动运行dropbear应用了,测试发现,只要支持了sftp-server,直接终端敲入dropbear就可以了,关闭dropbear命令killall dropbear

(6)测试

使用带有sftp协议的文件传输软件测试传输能力,这里我们使用的是FileZlia

发现可以正常连接和传输文件,移植成功,

 类似资料: