BusyBox 配置 SSH

1 准备工作

我们可以编译需要的 dropbear 工具: https://github.com/mkj/dropbear/releases

1
2
3
4
5
6
7
8
9
# 切换到解压的源码目录下
./configure --enable-static
make PROGRAMS="dropbear dbclient dropbearkey scp"

# 将编译完成的程序 cp 到 rootfs 目录
cp dropbear /path/to/rootfs/usr/sbin/
cp dropbearkey /path/to/rootfs/usr/bin/
cp dbclient /path/to/rootfs/usr/bin/
cp scp /path/to/rootfs/usr/bin/

BusyBox 极简 rootfs 默认没有:

  • /etc/passwd

  • /etc/group

  • /etc/dropbear

  • /dev/pts

  • DHCP client

  • PTY terminal support

SSH 必须依赖以上功能, 因此我们需要逐步补齐.

2 创建基础用户系统

在宿主机生成密码 Hash.

1
openssl passwd -6 1234

可能生成.

1
$6$X1yJVveI770P2Zdp$gWes7cMWJzlFtq5v1wS0v5xkZmRIkRKmeh0Aa2JORKqLLpQFqS0jtju9lBW8O1AR8u7SjS9.4376aTuUH/3gI.

在 qemu 中创建.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir -p /etc

# /etc/passwd
cat > /etc/passwd << 'EOF'
root:$6$X1yJVveI770P2Zdp$gWes7cMWJzlFtq5v1wS0v5xkZmRIkRKmeh0Aa2JORKqLLpQFqS0jtju9lBW8O1AR8u7SjS9.4376aTuUH/3gI.:0:0:root:/root:/bin/sh
EOF

# /etc/group
cat > /etc/group << 'EOF'
root:x:0:
EOF

mkdir -p /root
mkdir -p /etc/dropbear

3 配置网络

1
2
3
4
ip link set eth0 up
udhcpc eth0
ip addr add 10.0.2.15/24 dev eth0
ip route add default via 10.0.2.2

4 启用 PTY 支持

SSH 必须通过 PTY 分配终端, 否则会报错.

1
2
PTY allocation request failed
shell request failed

为此, 创建 /etc/pts.

1
2
3
4
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
# 如果缺少 /dev/ptmx
# mknod -m 666 /dev/ptmx c 5 2

5 启动 Dropbear

1
2
killall dropbear 2>/dev/null
dropbear -R -E

宿主机启动应包含.

1
-netdev user,id=net0,hostfwd=tcp::2222-:22

6 配置启动脚本

1
2
3
4
5
6
7
8
9
10
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts devpts /dev/pts

ip link set eth0 up
udhcpc eth0 &

mkdir -p /etc/dropbear
dropbear -R