LINUX.ORG.RU

Dropbear SSH vs wolfSSH, что выбрать для Embedded?

 , , , wolfssh


0

1

По мотивам прошлой темы: Ubuntu 22.04 LTS теряет сетевой коннект с USBNET-устройством, где удалось решить проблемы с подключением к древним телефонам Motorola на платформе EZX посредством USBLAN, USBNET.

Теперь хочется собрать для них SSH-сервер и похоже что кроме Dropbear и wolfSSH, других всё ещё развивающихся минималистичных SSH-серверов для embedded сегодня и не осталось. Или всё-таки есть что-нибудь ещё интересное?

Собственно, вопрос, есть у кого опыт работы с этими SSH-серверами? Что минималистичнее и быстрее, какой проще настраивается? Слышал что в OpenWRT используется Dropbear, но можно поставить wolfSSH тоже. Есть ли какие-нибудь подводные камни в их работе, поделитесь пожалуйста опытом.

★★★★★

Ответ на: комментарий от Pinkbyte

Собственно, раз никто не знает, я решил сам собрать как wolfSSH, так и Dropbear, попробовать их, сравнить и поделиться опытом.

Во-первых, кодовая база Dropbear значительно меньше, чем wolfSSH: 2.98 MiB супротив 19.85 MiB + 380.46 KiB.

Во-вторых, сборка мне показалась проще у Dropbear, чем у wolfSSH.

$ cd dropbear
$ ./configure --host=arm-linux-gnu --disable-harden --disable-syslog --with-zlib=/opt/toolchains/motoezx --prefix=`pwd`/../dropbear_built
$ make
$ make scp
$ make install

$ cd wolfssl
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ CFLAGS=-D_REENTRANT gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-ssh --enable-static --disable-shared --with-libz=/opt/toolchains/motoezx --prefix=`pwd`/../wolfssl_built
$ make install

$ cd wolfssh
$ ./autogen.sh
$ . /opt/toolchains/motoezx/setenv-a1200.sh
$ gl_cv_cc_vis_werror=no ax_cv_check_cflags___Werror=no ./configure --host=arm-linux-gnu --enable-scp --enable-sftp --with-wolfssl=`pwd`/../wolfssl_built --prefix=`pwd`/../wolfssh_built
$ make install

Из-за очень древнего кросс-компилятора GCC 3.3.6 в обоих случаях нужно было делать всякие странные патч-трюки. Однако, слава сишке, они оказались тривиальными.

Выложу эти патчи здесь, на всякий случай:

// Dropbear

From bcd25f9f10a65f3cca30a095c1044f80b82600c0 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 02:44:34 +0700
Subject: [PATCH] Fix dropbear compilation for MotoEZX platform

---
 default_options.h              | 8 ++++----
 libtommath/makefile_include.mk | 4 ++--
 svr-main.c                     | 4 ++--
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/default_options.h b/default_options.h
index 536f4e7..7b06765 100644
--- a/default_options.h
+++ b/default_options.h
@@ -21,10 +21,10 @@ IMPORTANT: Some options will require "make clean" after changes */
 /* Default hostkey paths - these can be specified on the command line.
  * Homedir is prepended if path begins with ~/
  */
-#define DSS_PRIV_FILENAME "/etc/dropbear/dropbear_dss_host_key"
-#define RSA_PRIV_FILENAME "/etc/dropbear/dropbear_rsa_host_key"
-#define ECDSA_PRIV_FILENAME "/etc/dropbear/dropbear_ecdsa_host_key"
-#define ED25519_PRIV_FILENAME "/etc/dropbear/dropbear_ed25519_host_key"
+#define DSS_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_dss_host_key"
+#define RSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_rsa_host_key"
+#define ECDSA_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ecdsa_host_key"
+#define ED25519_PRIV_FILENAME "/ezxlocal/dropbear/dropbear_ed25519_host_key"
 
 /* Set NON_INETD_MODE if you require daemon functionality (ie Dropbear listens
  * on chosen ports and keeps accepting connections. This is the default.
diff --git a/libtommath/makefile_include.mk b/libtommath/makefile_include.mk
index 711b630..b95c9cd 100644
--- a/libtommath/makefile_include.mk
+++ b/libtommath/makefile_include.mk
@@ -48,7 +48,7 @@ else
 endif
 endif
 
-LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wextra -Wshadow
+LTM_CFLAGS += -I./ -Wall -Wsign-compare -Wshadow
 
 # renamed for Dropbear to avoid clash with oss-fuzz $SANITIZER var
 ifdef LTM_SANITIZER
@@ -57,7 +57,7 @@ endif
 
 ifndef NO_ADDTL_WARNINGS
 # additional warnings
-LTM_CFLAGS += -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align
+LTM_CFLAGS += -Wbad-function-cast -Wcast-align
 LTM_CFLAGS += -Wstrict-prototypes -Wpointer-arith
 endif
 
diff --git a/svr-main.c b/svr-main.c
index a9f8a57..f0d9a72 100644
--- a/svr-main.c
+++ b/svr-main.c
@@ -169,9 +169,9 @@ static void main_noinetd(int argc, char ** argv, const char* multipath) {
 
 #if DROPBEAR_DO_REEXEC
 	if (multipath) {
-		execfd = open(multipath, O_CLOEXEC|O_RDONLY);
+		execfd = open(multipath, O_RDONLY);
 	} else {
-		execfd = open(argv[0], O_CLOEXEC|O_RDONLY);
+		execfd = open(argv[0], O_RDONLY);
 	}
 	if (execfd < 0) {
 		/* Just fallback to straight fork */
-- 
2.34.1

// wolfSSL

From e17fcbe474e34a170520d8410a88a6e3de47ed16 Mon Sep 17 00:00:00 2001
From: EXL <exlmotodev@gmail.com>
Date: Thu, 7 Jul 2022 01:04:25 +0700
Subject: [PATCH] Fix wolfSSL compilation for MotoEZX platform

---
 wolfssl/wolfcrypt/types.h | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h
index 5fad9b1..4343fa9 100644
--- a/wolfssl/wolfcrypt/types.h
+++ b/wolfssl/wolfcrypt/types.h
@@ -793,11 +793,7 @@ decouple library dependencies with standard string, memory and so on.
     #endif
 
     #ifndef OFFSETOF
-        #if defined(__clang__) || defined(__GNUC__)
-            #define OFFSETOF(type, field) __builtin_offsetof(type, field)
-        #else
-            #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
-        #endif
+        #define OFFSETOF(type, field) ((size_t)&(((type *)0)->field))
     #endif
 
 
-- 
2.34.1

В-третьих, размер получившихся серверов у Dropbear всего 263.2 KiB, у wolfSSH – 677.7 KiB. При этом сервачок Dropbear при запуске на конечном устройстве поддерживает всякие ED25519 из коробки, а вот с wolfSSH всё не так радужно. Да и проект мне показался очень сырым, опций кот наплакал, сам сервер лежит в папке examples и т. д

EXL ★★★★★
() автор топика
Последнее исправление: EXL (всего исправлений: 2)