强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

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 选项

dropbear [选项]
选项参数说明
-p[地址:]端口监听端口,可指定多个
-rkeyfile指定主机密钥文件(可指定多个)
-R-自动生成主机密钥(如果不存在)
-F-前台运行(不 fork 到后台)
-E-日志输出到 stderr 而非 syslog
-w-禁止 root 登录
-s-禁止密码登录(仅公钥)
-g-禁止密码登录(服务端专用,优先级高于 -s
-B-允许空密码登录
-j-禁止本地端口转发
-k-禁止远程端口转发
-a-允许任意主机连接到转发端口
-Ppidfile写入 PID 文件
-lcommand强制执行指定命令(替代 shell)
-Uuid以指定用户身份运行
-Ggid以指定组身份运行
-I秒数空闲超时
-T秒数认证超时(默认 200 秒)
-K秒数keepalive 间隔
-ccommand强制执行 command(不能被客户端覆盖)
-m-显示 MOTD(登录消息)
-L-显示服务器版本信息

客户端 dbclient 选项

dbclient [选项] [user@]host [command]
选项参数说明
-p端口连接端口
-ikeyfile指定私钥文件
-luser指定登录用户
-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 更明确)
-Juser@host通过跳板机连接(ProxyJump)
-ooption设置选项(兼容 OpenSSH 语法,有限支持)
-ccipher指定加密算法
-mMAC指定 MAC 算法
-baddress绑定本地地址

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★★★★☆
仅公钥 + 禁止 rootdropbear -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

超时参数详解

参数默认值推荐值说明
-T200s60-120s认证超时,减小可防御慢速扫描
-I0 (禁用)300s空闲超时,防止僵尸会话
-K0 (禁用)60sKeepalive,检测连接存活

编译时限制

通过 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_configDropbear 等效
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

扩展阅读


上一章:安装与编译 | 下一章:密钥管理