ssh(3)dropbear ssh套件编译安装

Dropbear 是一个相对较小的开源 SSH (Secure Shell) 服务器和客户端。它设计用于在内存和处理器资源有限的环境中替代标准的 OpenSSH,例如嵌入式系统。

dropbear

主要特点:

  • 体积小巧: 这是 Dropbear 最显著的特点。它的设计目标是占用尽可能少的内存和磁盘空间,使其非常适合资源受限的设备。
  • 兼容性: Dropbear 实现了完整的 SSH 版本 2 协议(不兼容ssh v1),并且与 OpenSSH 客户端兼容。
  • 功能可裁剪: 在编译时,可以轻松禁用不需要的功能,进一步减小其体积。
  • 支持常用功能: 尽管体积小,Dropbear 仍然支持许多常用的 SSH 功能,例如:
    • 公钥认证 (~/.ssh/authorized_keys)
    • 密码认证
    • X11 转发
    • 认证代理转发
    • 端口转发
    • SCP (通过单独的 dbclient 命令)
  • 多合一二进制文件: 服务器、客户端、密钥生成器和密钥转换器可以编译成一个单独的二进制文件,类似于 BusyBox,以节省空间。
  • 可作为独立服务或通过 inetd 运行。
  • 支持静态链接。

主要用途:

  • 嵌入式系统: 这是 Dropbear 最主要的应用场景。它常用于无线路由器、网络摄像头、物联网 (IoT) 设备和其他资源有限的嵌入式 Linux 或其他 Unix 系统。
  • 内存受限的环境: 在任何需要 SSH 功能但内存资源紧张的环境中,Dropbear 都是一个不错的选择。
  • 最小化安装: 对于只需要基本 SSH 功能的最小化 Linux 系统,Dropbear 可以提供必要的安全性,而不会占用过多资源。

与 OpenSSH 的比较:

与功能更全面的 OpenSSH 相比,Dropbear 在功能上有所精简,但其核心优势在于极小的资源占用。如果你的设备或环境对资源非常敏感,并且只需要基本的 SSH 功能,那么 Dropbear 是一个非常好的选择。如果需要更高级的功能,例如 SFTP 或更复杂的认证机制,那么 OpenSSH 可能更适合。
总而言之,Dropbear 是一款轻量级但功能实用的 SSH 服务器和客户端,特别适用于资源受限的嵌入式系统。


编译安装

env

  • centos7.x

1. 下载Dropbear源代码

首先,你需要从Dropbear官方网站或其镜像下载最新的源代码包。例如:

1
wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2024.85.tar.bz2

(截至2025年3月20日,最新版本可能是2024.85或其他更高版本,请根据实际情况替换URL中的版本号。)

2. 解压源代码

下载完成后,解压文件:

1
2
tar -xjf dropbear-2024.85.tar.bz2
cd dropbear-2024.85

3.编译依赖安装

yum install -y gcc gcc-c++ make  zlib-devel

4. 配置编译环境

在编译前,需要运行configure脚本来自定义安装路径和选项。基本的配置命令如下:

1
./configure --prefix=/usr/local/dropbear --sysconfdir=/etc/dropbear
  • --prefix:指定安装目录,这里设为/usr/local/dropbear
  • --sysconfdir:指定配置文件目录,这里设为/etc/dropbear

可选配置

如果你在嵌入式系统上使用Dropbear,可以根据需求调整选项,例如禁用某些功能以减小二进制文件大小:

  • --disable-zlib:禁用压缩支持。
  • --disable-syslog:禁用系统日志支持。
  • --disable-lastlog:禁用最后登录记录。
    示例:
1
./configure --prefix=/usr/local/dropbear --sysconfdir=/etc/dropbear --disable-zlib --disable-syslog

如果需要交叉编译(例如为ARM设备编译),需指定交叉编译器:

1
2
export CC=arm-linux-gnueabihf-gcc
./configure --host=arm-linux-gnueabihf --prefix=/usr/local/dropbear --sysconfdir=/etc/dropbear

5. 编译Dropbear

配置完成后,编译Dropbear及其工具:

1
2
3
4
5
6
7
8
9
make -j2 -s
make PROGRAMS="scp" -s
dbclient
dropbear
dropbearconvert
dropbearkey
scp

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
  • PROGRAMS指定要编译的程序:
    • dropbear:SSH服务器。
    • dbclient:SSH客户端。
    • dropbearkey:密钥生成工具。
    • dropbearconvert:密钥格式转换工具。
    • scp:安全文件拷贝工具。

如果需要静态链接二进制文件(适用于嵌入式系统无动态库环境),可以加上STATIC=1

1
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" STATIC=1

6. 安装Dropbear

编译完成后,安装到指定目录:

1
sudo make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

安装完成后,二进制文件会出现在/usr/local/dropbear/bin/usr/local/dropbear/sbin中。

dropbear

[root@vgt-centos7-51 dropbear-2024.85]# /usr/local/dropbear/sbin/dropbear  --help
Invalid option --
Dropbear server v2024.85 https://matt.ucc.asn.au/dropbear/dropbear.html
Usage: /usr/local/dropbear/sbin/dropbear [options]
-b bannerfile   Display the contents of bannerfile before user login
                (default: none)
-r keyfile      Specify hostkeys (repeatable)
                defaults: 
                - rsa /etc/dropbear/dropbear_rsa_host_key
                - ecdsa /etc/dropbear/dropbear_ecdsa_host_key
                - ed25519 /etc/dropbear/dropbear_ed25519_host_key
-R              Create hostkeys as required
-F              Don't fork into background   #### 前台运行
-e              Pass on server process environment to child process
-E              Log to stderr rather than syslog
-m              Don't display the motd on login
-w              Disallow root logins   #### 禁止root登录
-G              Restrict logins to members of specified group
-s              Disable password logins  #### 禁止密码认证
-g              Disable password logins for root #### 禁止root密码登录
-B              Allow blank password logins
-t              Enable two-factor authentication (both password and public key required)
-T              Maximum authentication tries (default 10)
-j              Disable local port forwarding
-k              Disable remote port forwarding
-a              Allow connections to forwarded ports from any host
-c command      Force executed command
-p [address:]port
                Listen on specified tcp port (and optionally address),
                up to 10 can be specified
                (default port is 22 if none specified)
-P PidFile      Create pid file PidFile
                (default /var/run/dropbear.pid)
-l <interface>
                interface to bind on
-i              Start for inetd
-W <receive_window_buffer> (default 24576, larger may be faster, max 10MB)
-K <keepalive>  (0 is never, default 0, in seconds)
-I <idle_timeout>  (0 is never, default 0, in seconds)
-z    disable QoS
-V    Version

7. 生成主机密钥

Dropbear需要主机密钥才能运行。创建密钥存储目录并生成密钥:

1
2
3
sudo mkdir -p /etc/dropbear
sudo /usr/local/dropbear/bin/dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
sudo /usr/local/dropbear/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
  • -t rsa:生成RSA密钥。
  • -t dss:生成DSS密钥(可选,部分系统可能需要)。

8. 启动Dropbear服务

手动启动Dropbear服务器:

1
sudo /usr/local/dropbear/sbin/dropbear -F -E
  • -F:不后台运行,方便调试。
  • -E:将日志输出到标准错误。

若要更改默认端口(22),可以用-p选项,例如监听2222端口:

1
2
3
4
5
6
7
sudo /usr/local/dropbear/sbin/dropbear -F -E -p 2222

#前台运行
dropbear -FE -p 2222

#后台运行
dropbear -E -p 2222 #-p指定端

9. 配置开机自启(可选)

若需开机自启,可以根据系统类型配置:

  • Systemd系统(如Ubuntu):
    创建/etc/systemd/system/dropbear.service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Unit]
    Description=Dropbear SSH Server
    After=network.target

    [Service]
    ExecStart=/usr/local/dropbear/sbin/dropbear -F -p 22
    Restart=always

    [Install]
    WantedBy=multi-user.target

    启用服务:

    1
    2
    3
    sudo systemctl daemon-reload
    sudo systemctl enable dropbear
    sudo systemctl start dropbear
  • 嵌入式系统:根据具体init系统(如SysV或OpenRC)添加启动脚本。

10. 测试连接

使用Dropbear自带的dbclient或OpenSSH客户端测试:

1
/usr/local/dropbear/bin/dbclient -p 22 user@hostname

或:

1
ssh -p 22 user@hostname

注意事项

  1. 权限:确保/etc/dropbear及其密钥文件只有root可写。
  2. 防火墙:如果更改了端口,需在防火墙中开放对应端口(如iptables -A INPUT -p tcp --dport 2222 -j ACCEPT)。
  3. 调试:若连接失败,检查日志输出或用strace跟踪问题。