技术专栏
轻量级SSH Dropbear移植
前言
Dropbear 是一款面向嵌入式系统的轻量级 SSH 实现,相比 OpenSSH 具有以下优势:
- 体积小、依赖少
- 启动快、内存占用低
- 支持 SSH 登录、端口转发
但需要注意:
- Dropbear 默认不包含
scp,如需支持scp,需在源码目录执行make scp编译生成;
1. 源码获取
Zlib 源码下载:
发行版 v1.2.11 · madler/zlib
Dropbear 源码下载:
Index of /dropbear/releases
2.交叉编译
#SS928V100 hi3519dv500
CHIP ?= hi3519dv500
ifeq ($(CHIP), SS928V100)
ARCH := aarch64
CROSS_COMPILE := aarch64-mix210-linux-
CROSS_HOST := aarch64-mix210-linux
else ifeq ($(CHIP), hi3519dv500)
ARCH := aarch64
CROSS_COMPILE := aarch64-v01c01-linux-gnu-
CROSS_HOST := aarch64-v01c01-linux-gnu
endif
CUR_MK := $(abspath $(lastword $(MAKEFILE_LIST)))
TOP_DIR := $(shell dirname $(CUR_MK))
ZLIB_TAR := zlib-1.2.11.tar.gz
DROPBEAR_TAR := dropbear-2025.89.tar.bz2
ZLIB_DIR := $(TOP_DIR)/zlib
DROPBEAR_DIR := $(TOP_DIR)/dropbear
MODULES := ZLIB DROPBEAR
PATCH_MODULES :=
UNPACK_TARS := $(foreach mod,$(MODULES),$($(mod)_TAR))
UNPACK_DIRS := $(foreach mod,$(MODULES),$($(mod)_DIR))
OUTPUT_DIR := $(TOP_DIR)/output/
OUTPUT_BUILD_DIR := $(OUTPUT_DIR)/build
OUTPUT_BIN_DIR := $(OUTPUT_DIR)/bin
export PKG_CONFIG_LIBDIR=$(OUTPUT_BUILD_DIR)/lib/pkgconfig
NO_COLOR=\033[0m
OK_COLOR=\033[32;01m
CPU_NUM := $(shell cat /proc/stat | grep cpu[0-16] -c)
# build targets
BUILD_TARGETS := zlib dropbear
CLEAN_TARGETS := zlib_clean dropbear_clean
.PHONY: unpack zlib dropbear unpack_clean zlib_clean dropbear_clean install
all: prepare unpack $(BUILD_TARGETS) install
clean: unpack_clean #$(CLEAN_TARGETS)
@rm -rf $(OUTPUT_DIR)
prepare:
@mkdir -p $(OUTPUT_BIN_DIR)
@mkdir -p $(OUTPUT_BUILD_DIR)
zlib:
@set -e; \
pushd $(ZLIB_DIR); \
CC=$(CROSS_COMPILE)gcc prefix=$(OUTPUT_BUILD_DIR) CFLAGS="-fstack-protector-all -fPIC" \
LDFLAGS="-Wl,-z,now -Wl,-z,relro -Wl,-z,noexecstack" ./configure; \
make -j$(CPU_NUM); \
make install -j${CPU_NUM}; \
popd
@printf "${OK_COLOR}========== zlib build OK! ==========${NO_COLOR}\n"
dropbear: zlib
@set -e; \
pushd $(DROPBEAR_DIR); \
./configure CC=$(CROSS_COMPILE)gcc AR=$(CROSS_COMPILE)ar --host=$(CROSS_HOST) --prefix=$(OUTPUT_BUILD_DIR) \
--with-zlib=$(OUTPUT_BUILD_DIR) \
--enable-static;\
make -j$(CPU_NUM); \
make install -j${CPU_NUM}; \
make scp; \
popd
@printf "${OK_COLOR}========== dropbear build OK! ==========${NO_COLOR}\n"
install:
@cp ${OUTPUT_BUILD_DIR}/bin/dbclient ${OUTPUT_BIN_DIR}/
@cp ${OUTPUT_BUILD_DIR}/bin/dropbearconvert ${OUTPUT_BIN_DIR}/
@cp ${OUTPUT_BUILD_DIR}/bin/dropbearkey ${OUTPUT_BIN_DIR}/
@cp ${OUTPUT_BUILD_DIR}/sbin/dropbear ${OUTPUT_BIN_DIR}/
@cp ${DROPBEAR_DIR}/scp ${OUTPUT_BIN_DIR}/
@${CROSS_COMPILE}strip ${OUTPUT_BIN_DIR}/dbclient --strip-unneeded
@${CROSS_COMPILE}strip ${OUTPUT_BIN_DIR}/dropbearconvert --strip-unneeded
@${CROSS_COMPILE}strip ${OUTPUT_BIN_DIR}/dropbearkey --strip-unneeded
@${CROSS_COMPILE}strip ${OUTPUT_BIN_DIR}/dropbear --strip-unneeded
@${CROSS_COMPILE}strip ${OUTPUT_BIN_DIR}/scp --strip-unneeded
@printf "${OK_COLOR}========== install OK! ==========${NO_COLOR}\n"
zlib_clean:
@cd ${ZLIB_DIR}/ && make CC=$(CROSS_COMPILE)gcc clean
dropbear_clean:
@cd ${DROPBEAR_DIR}/ && make CC=$(CROSS_COMPILE)gcc clean
unpack: unpack_clean
@set -e; \
i=0; \
for tar in $(UNPACK_TARS); do \
mod=$$(echo $(MODULES) | cut -d' ' -f$$((i+1))); \
dir=$$(echo $(UNPACK_DIRS) | cut -d' ' -f$$((i+1))); \
echo "Unpacking $$tar to $$dir"; \
mkdir -p $$dir; \
tar -xf $$tar -C $$dir --strip-components=1; \
if echo "$(PATCH_MODULES)" | grep -wq "$$mod"; then \
patchfile="$(TOP_DIR)/$$(echo $$tar | sed -e 's/\.tar.*//').patch"; \
if [ -f "$$patchfile" ]; then \
echo "Patching $$mod with $$patchfile"; \
cd $$dir && patch -p1 < "$$patchfile" || true; \
cd - >/dev/null; \
else \
echo "Patch file $$patchfile not found"; \
fi; \
fi; \
i=$$((i+1)); \
done
@printf "${OK_COLOR}========== unpack OK! ==========${NO_COLOR}\n"
unpack_clean:
@rm -rf $(UNPACK_DIRS)
@printf "${OK_COLOR}========== unpack_clean OK! ==========${NO_COLOR}\n"
编译
make
- dropbear(sshd)
- dbclient(ssh 客户端)
- dropbearkey(密钥生成工具)
- dropbearconvert(密钥转换)
3. dropbear部署
①.拷贝程序至/usr/bin 和 /sbin目录
/usr/bin/dbclient
/usr/bin/dropbearkey
/usr/bin/dropbearconvert
/usr/bin/scp
/usr/sbin/dropbear
#记得给权限
chmod +x /usr/bin/dbclient
chmod +x /usr/bin/dropbearkey
chmod +x /usr/bin/dropbearconvert
chmod +x /usr/bin/scp
chmod +x /usr/sbin/dropbear

②.设置密码
③.创建必要目录
mkdir /etc/dropbear
mkdir /var/log
④.生成主机密钥,创建ssh-keycheck.sh
#!/bin/sh
# $1 = dropbearkey 路径(可选)
# $2 = 密钥目录(可选)
DROPBEARKEY=${1:-dropbearkey}
KEY_DIR=${2:-/etc/dropbear}
umask 077
mkdir -p "$KEY_DIR"
gen_key() {
type=$1
key="$KEY_DIR/dropbear_${type}_host_key"
# 已存在且可解析,直接跳过
if [ -s "$key" ] && "$DROPBEARKEY" -y -f "$key" >/dev/null 2>&1; then
return
fi
echo "Generating Dropbear $type host key..."
"$DROPBEARKEY" -t "$type" -f "$key"
sync
}
gen_key rsa
gen_key ecdsa
gen_key ed25519
chmod +x ssh-keycheck.sh
⑤.自启动 Dropbear,创建S89nettools
#!/bin/sh
for dir in \
/var/log
do
[ -d "$dir" ] || mkdir -p "$dir"
done
opt/bin/ssh-keycheck.sh /usr/bin/dropbearkey /etc/dropbear
/usr/sbin/dropbear

⑥.重启验证

scp文件传输测试:
若要使用
SFTP传输,需要使用 openssh 编译出的 sftp-server 放置在 /usr/libexec 目录下,这样就能使用 sftp上传与下载文件。
4.资源下载
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
1
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据相关专栏
-
浏览量:2064次2025-04-15 17:35:11
-
浏览量:1913次2023-06-07 14:32:02
-
浏览量:3092次2020-03-25 10:49:44
-
浏览量:2173次2023-06-20 16:09:54
-
浏览量:4275次2020-10-26 11:47:36
-
浏览量:2967次2020-11-14 09:37:35
-
浏览量:1498次2024-12-25 15:02:36
-
浏览量:3967次2017-12-12 19:07:56
-
浏览量:5077次2024-01-25 15:00:06
-
浏览量:5482次2021-08-06 15:29:06
-
浏览量:3685次2022-03-25 09:00:31
-
浏览量:3464次2023-04-16 20:34:36
-
浏览量:2312次2023-12-11 16:43:29
-
浏览量:5690次2021-06-28 17:29:22
-
浏览量:1697次2018-06-07 14:34:57
-
浏览量:2074次2022-01-01 09:00:36
-
浏览量:2396次2018-04-23 20:07:57
-
浏览量:6430次2022-04-02 09:00:36
-
浏览量:1724次2025-04-16 17:12:31
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
Sunshine
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注

微信扫码分享
QQ好友