镜像化Dropbear提供ssh认证

Dropbear 是一款为嵌入式系统和低资源环境设计的 SSH 服务器和客户端。在 Docker 容器化场景中,如果你需要 SSH 接入但又觉得传统的 OpenSSH 太过臃肿,Dropbear 是极佳的替代方案。


一、 Dropbear 的核心特点

相比于 OpenSSH,Dropbear 的设计哲学是“够用就好”:

  • 极小的体积: 编译后的二进制文件通常只有几百 KB,而 OpenSSH 可能需要数 MB 甚至更多依赖。
  • 低内存占用: 运行时消耗的 RAM 极低,非常适合限制了内存配比的容器。
  • 无状态倾向: 它的配置主要通过命令行参数完成,而不是复杂的配置文件(如 /etc/ssh/sshd_config),这非常符合容器的“不可变”原则。
  • 兼容性: 支持标准的 SSH 协议、公钥认证以及 SCP 传输。

二、 Dockerfile 优化实践

为了让容器尽可能轻量且安全,我们通常结合 Alpine Linux 来构建 Dropbear 镜像。

1. 基础优化策略

  • 使用多阶段构建: 减少最终镜像层数。
  • 清理缓存: 在安装完包后立即删除包管理器索引。
  • 环境变量控制: 使用 ENV 定义端口和运行参数。

2. 示例 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 运行环境
FROM alpine:3.18

# 安装 dropbear 并清理缓存
RUN apk add --no-cache dropbear

# 创建必要的目录
RUN mkdir -p /etc/dropbear

# 生成 SSH 密钥(在构建时生成或在 entrypoint 生成)
# 注意:生产环境建议通过 Volume 挂载密钥
RUN dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

# 设置 root 密码 (仅用于演示,建议使用公钥登录)
RUN echo "root:yourpassword" | chpasswd

# 暴露端口
EXPOSE 22

# 启动命令:-F 运行在前台,-E 错误输出到标准输出,-p 指定端口,-R 允许自动生成密钥
CMD ["dropbear", "-F", "-E", "-p", "22"]

三、 Docker Compose 容器优化docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
services:
ssh-server:
build: .
image: my-dropbear:latest
container_name: dropbear_service
ports:
- "2222:22"
volumes:
- ./id_rsa.pub:/root/.ssh/authorized_keys:ro
deploy:
resources:
limits:
cpus: '0.1' # 限制只使用 0.1 核
memory: 32M # 限制 32MB 内存
security_opt:
- no-new-privileges:true # 禁止进程获取新权限
cap_drop:
- ALL # 禁用所有 Linux 能力
cap_add:
- NET_BIND_SERVICE # 仅允许绑定端口
restart: unless-stopped