基于dropbear实现嵌入式系统ssh服务端与客户端完整交互

以下基于 Dropbear 实现 SSH 服务端与客户端交互的完整步骤,涵盖服务端部署、客户端连接、认证配置及消息传输,结合了多篇权威资料的核心实践:


  1. 环境准备与安装

服务端安装

• Linux 系统(以 Ubuntu/CentOS 为例)

Ubuntu/Debian

sudo apt update && sudo apt install dropbear

CentOS

sudo yum install dropbear

• 嵌入式系统

需交叉编译(示例为 ARM 平台):

./configure --prefix=/opt/dropbear --host=arm-linux CC=arm-linux-gcc

make PROGRAMS="dropbear dbclient dropbearkey scp"

make install

将编译生成的 dropbear(服务端)、dbclient(客户端)等文件移植到目标设备的 /usr/bin 或 /usr/sbin。

客户端安装

• 服务端自带 dbclient,或安装 OpenSSH 客户端:

sudo apt install openssh-client # Ubuntu


  1. 服务端配置

生成主机密钥

Dropbear 需密钥文件才能启动,默认路径 /etc/dropbear/:

mkdir -p /etc/dropbear

dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048

dropbearkey -t ecdsa -f /etc/dropbear/dropbear_ecdsa_host_key

📌 注意:密钥类型需与客户端兼容(RSA/ECDSA 更安全)。

修改监听设置

编辑配置文件 /etc/default/dropbear(Ubuntu)或 /etc/sysconfig/dropbear(CentOS):

修改端口(避免与 OpenSSH 冲突)

DROPBEAR_PORT=2222

限制登录用户(可选)

DROPBEAR_EXTRA_ARGS="-s -w -g root" # 禁止 root 登录,仅允许指定用户

启动服务

sudo systemctl start dropbear # 系统服务

或手动启动(嵌入式环境常用)

dropbear -p 2222 -F -E -m # -F 前台运行,-E 输出日志,-m 禁用密码认证


  1. 客户端配置与登录

认证方式选择

方式 配置步骤

密码认证 服务端需启用 -m 参数;客户端直接输入密码

公钥认证 🔑 更安全,需生成密钥对并上传公钥至服务端

公钥认证配置

  1. 生成密钥对(客户端执行):

ssh-keygen -t ed25519 -f ~/.ssh/dropbear_key # 推荐 ed25519

  1. 上传公钥至服务端:

ssh-copy-id -i ~/.ssh/dropbear_key.pub user@server_ip -p 2222

或手动追加公钥到服务端 ~/.ssh/authorized_keys

  1. 登录服务端:

使用 dbclient(Dropbear 客户端)

dbclient -y -i ~/.ssh/dropbear_key user@server_ip -p 2222

使用 OpenSSH 客户端

ssh -i ~/.ssh/dropbear_key user@server_ip -p 2222


  1. 客户端向服务端发送消息

SSH 会话建立后,可通过以下方式传输数据:

  1. 交互式 Shell 命令

登录后直接输入命令,服务端执行后返回结果:

echo "Hello from client" > server_message.txt # 服务端创建文件

  1. 非交互式单命令执行

ssh -p 2222 user@server_ip "cat > /tmp/client_msg.txt" < local_msg.txt

  1. SCP 文件传输

scp -P 2222 message.txt user@server_ip:/home/user/


  1. 安全优化建议

• 禁用密码登录:编辑服务端配置,添加 DROPBEAR_EXTRA_ARGS="-s"。

• 防火墙限制:仅允许可信 IP 访问 SSH 端口。

• 空闲超时:添加 IdleTimeout 600 到配置,自动断开空闲会话。

• 日志监控:通过 tail -f /var/log/auth.log 跟踪登录尝试。


常见问题解决

• 连接拒绝:检查服务端是否监听端口 netstat -tuln | grep 2222,确认防火墙规则。

• 密钥认证失败:确保服务端 ~/.ssh/authorized_keys 权限为 600,属主正确。

• 嵌入式设备存储不足:删除未使用的程序(如 dropbearconvert),精简二进制文件。

💡 提示:完整日志可通过 journalctl -u dropbear 或启动时加 -E 参数查看。若需更复杂功能(如端口转发),参考 Dropbear 手册 。

通过以上步骤,你已实现基于 Dropbear 的轻量级 SSH 服务,并完成安全消息传输。对于嵌入式场景,重点确保交叉编译兼容性与存储优化;服务器环境则侧重权限与网络隔离。

相关推荐
冰帆<18 小时前
[特殊字符] 深度起底:突破火山引擎 Ark-Helper 的 Linux 底层环境死锁,顺手魔改一份 Windows 一键安装脚本!
linux·windows·火山引擎
我星期八休息18 小时前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring
2301_7779983418 小时前
Linux:文件系统
linux
Tian_Hang18 小时前
Linux基础知识(五)
linux·运维·服务器
凡人叶枫18 小时前
Effective C++ 条款32:确定你的 public 继承塑模出 is-a(是一种)关系
java·linux·开发语言·c++·嵌入式开发
utf8mb4安全女神18 小时前
expect工具,expect脚本,实现全自动免交互登录ssh,shell脚本和expect结合使用,在多台服务器上创建1个用户【linux】
linux·运维·服务器
暮云星影18 小时前
全志开发环境搭建及编译构建
linux·arm开发·驱动开发
vortex518 小时前
Alpine Linux 运行架构解析:从内核到容器的精简之道
linux·运维·架构
三块可乐两块冰19 小时前
rag学习5
linux·前端·python
::呵呵哒::19 小时前
在macOS/Linux上优雅管理多个JDK版本:环境变量与别名配置指南
java·linux·macos