Dropbear SSH 完全指南 / 03 - 配置详解
第三章:配置详解
3.1 配置方式概览
Dropbear 的配置方式与 OpenSSH 有显著不同。Dropbear 没有类似 sshd_config 的配置文件——所有运行时配置都通过命令行选项完成。编译时选项则通过 localoptions.h 控制。
配置层级
┌────────────────────────────────────────────┐
│ 编译时配置 (localoptions.h) │ ← 功能裁剪、默认值
├────────────────────────────────────────────┤
│ 启动脚本 (命令行选项) │ ← 运行时行为
├────────────────────────────────────────────┤
│ 系统文件 (/etc/passwd 等) │ ← 用户认证
└────────────────────────────────────────────┘
| 配置方式 | 文件 | 作用 |
|---|
| 编译选项 | localoptions.h | 启用/禁用功能,设置默认值 |
| 运行选项 | 命令行参数 | 端口、认证、日志、限制等 |
| 系统配置 | /etc/passwd, /etc/shadow | 用户账户信息 |
| 授权密钥 | ~/.ssh/authorized_keys | 公钥认证 |
3.2 命令行选项完整参考
服务端 dropbear 选项
| 选项 | 参数 | 说明 |
|---|
-p | [地址:]端口 | 监听端口,可指定多个 |
-r | keyfile | 指定主机密钥文件(可指定多个) |
-R | - | 自动生成主机密钥(如果不存在) |
-F | - | 前台运行(不 fork 到后台) |
-E | - | 日志输出到 stderr 而非 syslog |
-w | - | 禁止 root 登录 |
-s | - | 禁止密码登录(仅公钥) |
-g | - | 禁止密码登录(服务端专用,优先级高于 -s) |
-B | - | 允许空密码登录 |
-j | - | 禁止本地端口转发 |
-k | - | 禁止远程端口转发 |
-a | - | 允许任意主机连接到转发端口 |
-P | pidfile | 写入 PID 文件 |
-l | command | 强制执行指定命令(替代 shell) |
-U | uid | 以指定用户身份运行 |
-G | gid | 以指定组身份运行 |
-I | 秒数 | 空闲超时 |
-T | 秒数 | 认证超时(默认 200 秒) |
-K | 秒数 | keepalive 间隔 |
-c | command | 强制执行 command(不能被客户端覆盖) |
-m | - | 显示 MOTD(登录消息) |
-L | - | 显示服务器版本信息 |
客户端 dbclient 选项
dbclient [选项] [user@]host [command]
| 选项 | 参数 | 说明 |
|---|
-p | 端口 | 连接端口 |
-i | keyfile | 指定私钥文件 |
-l | user | 指定登录用户 |
-L | [bind:]port:host:hostport | 本地端口转发 |
-R | [bind:]port:host:hostport | 远程端口转发 |
-D | [bind:]port | 动态 SOCKS 代理 |
-N | - | 不执行远程命令(仅转发) |
-f | - | 后台运行 |
-g | - | 允许远程主机连接到本地转发端口 |
-t | - | 分配伪终端 |
-T | - | 不分配伪终端 |
-x | - | 禁用 X11 转发 |
-A | - | 启用 Agent 转发 |
-s | - | 请求子系统(如 sftp) |
-y | - | 接受主机密钥(不提示) |
-Y | - | 显式接受主机密钥(比 -y 更明确) |
-J | user@host | 通过跳板机连接(ProxyJump) |
-o | option | 设置选项(兼容 OpenSSH 语法,有限支持) |
-c | cipher | 指定加密算法 |
-m | MAC | 指定 MAC 算法 |
-b | address | 绑定本地地址 |
3.3 监听配置
基本端口配置
# 默认端口 22
dropbear
# 自定义端口
dropbear -p 2222
# 监听所有地址的多个端口
dropbear -p 22 -p 2222
# 监听指定 IP 地址
dropbear -p 192.168.1.100:22
# 监听 IPv6
dropbear -p [::]:22
# 同时监听 IPv4 和 IPv6
dropbear -p 22 -p [::]:22
生产环境典型配置
# 仅监听内网接口
dropbear \
-p 10.0.0.1:22 \
-F -E -R \
-P /var/run/dropbear.pid \
-I 300 \
-K 60 \
-T 60
OpenWrt 典型配置
# /etc/config/dropbear (OpenWrt uci 格式)
config dropbear
option PasswordAuth 'on'
option RootPasswordAuth 'on'
option Port '22'
option Interface 'lan'
config dropbear
option PasswordAuth 'off'
option Port '2222'
option Interface 'wan'
3.4 认证配置
密码认证控制
# 允许密码认证(默认)
dropbear
# 禁用密码认证(仅公钥)
dropbear -s
# 或
dropbear -g
# 允许空密码(不推荐)
dropbear -B
禁止 root 登录
# 禁止 root 登录
dropbear -w
# 允许 root 登录(默认,需要 root 有密码或密钥)
dropbear
认证组合方案
| 需求 | 命令选项 | 安全等级 |
|---|
| 全功能开发环境 | dropbear | ★★☆☆☆ |
| 禁止 root 登录 | dropbear -w | ★★★☆☆ |
| 仅公钥认证 | dropbear -s | ★★★★☆ |
| 仅公钥 + 禁止 root | dropbear -s -w | ★★★★★ |
| 紧急恢复(空密码) | dropbear -B -F -E | ★☆☆☆☆ |
3.5 日志配置
syslog 日志
Dropbear 默认将日志写入 syslog:
# 默认方式(写入 syslog)
dropbear
# 查看日志
grep dropbear /var/log/auth.log # Debian/Ubuntu
grep dropbear /var/log/secure # CentOS/RHEL
journalctl -u dropbear # systemd
stderr 日志
# 输出到 stderr(适合容器、前台调试)
dropbear -F -E
# 重定向到文件
dropbear -F -E 2>/var/log/dropbear.log
# 与 systemd 配合
ExecStart=/usr/sbin/dropbear -F -E -R -p 22
日志级别
Dropbear 使用 syslog 的标准级别。在编译时可以通过修改 localoptions.h 调整日志详细程度:
/* localoptions.h */
/* 日志详细级别: 0=最少, 1=普通, 2=详细, 3=调试 */
#define LOG_LEVEL 1
典型日志内容
# 连接日志
May 10 08:30:15 myhost dropbear[1234]: [1234] May 10 08:30:15 Login attempt for nonexistent user from 192.168.1.50:54321
May 10 08:30:16 myhost dropbear[1234]: [1234] Password auth succeeded for 'admin' from 192.168.1.50:54321
May 10 08:30:16 myhost dropbear[1234]: [1234] Exit (admin): Disconnect received
# 密钥认证日志
May 10 08:31:00 myhost dropbear[1235]: [1235] Pubkey auth succeeded for 'admin' with key rsa-sha2-256 xxx from 192.168.1.50:54322
# 错误日志
May 10 08:32:00 myhost dropbear[1236]: [1236] Early exit: Host key file '/etc/dropbear/dropbear_rsa_host_key' not found
3.6 超时与限制配置
超时设置
# 认证超时:未认证连接的超时时间(默认 200 秒)
dropbear -T 120
# 空闲超时:已认证会话的空闲超时(默认 0 = 不超时)
dropbear -I 300
# Keepalive 间隔:定期发送 keepalive 探测
dropbear -K 60
超时参数详解
| 参数 | 默认值 | 推荐值 | 说明 |
|---|
-T | 200s | 60-120s | 认证超时,减小可防御慢速扫描 |
-I | 0 (禁用) | 300s | 空闲超时,防止僵尸会话 |
-K | 0 (禁用) | 60s | Keepalive,检测连接存活 |
编译时限制
通过 localoptions.h 设置的硬限制:
/* 最大未认证并发连接数 */
#define MAX_UNAUTH_CLIENTS 10 /* 默认 10,嵌入式可设为 3-5 */
/* 最大认证尝试次数 */
#define MAX_AUTH_TRIES 10 /* 默认 10,建议设为 3-5 */
/* 认证超时(编译时默认值) */
#define AUTH_TIMEOUT 200 /* 默认 200 秒 */
/* 最大通道数 */
#define MAX_CHANNELS 100 /* 每个连接的通道数 */
/* 最大窗口大小 */
#define RECV_WINDOW 200000 /* 接收窗口大小 */
3.7 MOTD(每日消息)
MOTD(Message Of The Day)是用户登录时显示的消息。
# 启用 MOTD 显示
dropbear -m
# MOTD 文件位置
# Dropbear 读取 /etc/motd
echo "Welcome to Embedded Device v1.0" > /etc/motd
# 也支持动态 MOTD(取决于 /etc/pam.d/sshd 配置)
# Dropbear 不使用 PAM,因此只读取 /etc/motd
动态 MOTD 脚本示例
#!/bin/sh
# /etc/profile.d/motd.sh - 动态生成 MOTD
echo ""
echo "========================================="
echo " 设备: $(hostname)"
echo " 时间: $(date)"
echo " 运行: $(uptime -p)"
echo " 内存: $(free -h | awk '/Mem/{print $3"/"$2}')"
echo " 磁盘: $(df -h / | awk 'NR==2{print $5}')"
echo "========================================="
echo ""
3.8 主机密钥配置
# 使用指定的主机密钥
dropbear -r /etc/dropbear/dropbear_rsa_host_key \
-r /etc/dropbear/dropbear_ed25519_host_key
# 自动生成密钥(如果不存在)
dropbear -R
# 常见主机密钥路径
/etc/dropbear/dropbear_rsa_host_key
/etc/dropbear/dropbear_dss_host_key
/etc/dropbear/dropbear_ecdsa_host_key
/etc/dropbear/dropbear_ed25519_host_key
3.9 启动脚本模板
完整的 systemd 服务文件
# /etc/systemd/system/dropbear.service
[Unit]
Description=Dropbear SSH Server
Documentation=man:dropbear(8)
After=network.target auditd.service
ConditionPathExists=/etc/dropbear
[Service]
Type=notify
EnvironmentFile=-/etc/default/dropbear
# 自动生成缺失的主机密钥
ExecStartPre=/bin/sh -c '\
for keytype in rsa ed25519; do \
keyfile=/etc/dropbear/dropbear_$${keytype}_host_key; \
[ -f "$$keyfile" ] || /usr/bin/dropbearkey -t $$keytype -f $$keyfile; \
done'
ExecStart=/usr/sbin/dropbear \
-F -E -R \
-p 22 \
-I 300 \
-K 60 \
-T 120 \
-P /run/dropbear.pid \
$DROPBEAR_EXTRA_ARGS
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
WatchdogSec=60
# 安全加固
NoNewPrivileges=no
ProtectSystem=strict
ReadWritePaths=/etc/dropbear /run/dropbear
ProtectHome=read-only
[Install]
WantedBy=multi-user.target
# /etc/default/dropbear
# 额外参数
DROPBEAR_EXTRA_ARGS="-w"
3.10 与 OpenSSH 配置对照
如果你熟悉 OpenSSH 的 sshd_config,以下是配置项的对照:
| OpenSSH sshd_config | Dropbear 等效 |
|---|
Port 22 | -p 22 |
ListenAddress 0.0.0.0 | -p 0.0.0.0:22 |
PermitRootLogin no | -w |
PasswordAuthentication no | -s |
PubkeyAuthentication yes | 默认启用 |
PermitEmptyPasswords no | 默认禁止(-B 允许) |
X11Forwarding yes | 默认启用(编译选项) |
AllowTcpForwarding yes | 默认启用 |
ClientAliveInterval 60 | -K 60 |
ClientAliveCountMax 3 | 无直接等效 |
LoginGraceTime 120 | -T 120 |
MaxAuthTries 3 | 编译选项 MAX_AUTH_TRIES |
MaxSessions 10 | 编译选项 MAX_CHANNELS |
PrintMotd yes | -m |
PidFile /run/dropbear.pid | -P /run/dropbear.pid |
LogLevel INFO | 编译选项 |
Banner /etc/banner | 无直接等效 |
Match ... | 不支持 |
3.11 本章小结
| 要点 | 说明 |
|---|
| 配置方式 | 全部通过命令行选项,无配置文件 |
| 编译选项 | 通过 localoptions.h 控制功能和默认值 |
| 监听 | -p 支持多端口、多地址 |
| 认证 | -s 禁密码、-w 禁 root、-B 允许空密码 |
| 日志 | 默认 syslog,-E 输出 stderr |
| 超时 | -T 认证超时、-I 空闲超时、-K keepalive |
扩展阅读
上一章:安装与编译 | 下一章:密钥管理 →