当前位置: 首页 > 工具软件 > dropbear > 使用案例 >

[嵌入式linux] buildroot 添加 dropbear 并配置密钥

田冥夜
2023-12-01

buildroot 添加 dropbear 并配置密钥

1. buildroot 配置

cd <buildrootdir> #
make menuconfig 

# 进入配置界面
Target packages > Networking applications--->
    # 按 'y' 选中 dropbear 然后保持默认如下
    [*]dropbear                                                             
        [*]   client programs
        [ ]   disable reverse DNS lookups
        [*]   optimize for size
        [ ]   log dropbear access to wtmp
        [ ]   log dropbear access to lastlog
        [ ]   enable legacy crypto
        ()    path to custom localoptions.h definitions file
# 保存退出

make # 生成 output/image/roofs.tar.gz 

2. 为 dropbear 主机(server)生成 hostkey

以下操作在上位机 ubuntu 执行

  • 如果根文件系统配置为只读文件系统ramdisk(系统可读写,但系统重启后所有系统文件会被还原),那么要在上位机为文件系统做好 host_keys
  • 如果根文件系统是可读写的,可以省略此步。
# 解压上述根文件系统
cd <buildrootdir>/output/image
mkdir rootfs
mv rootfs.tar.gz rootfs
cd rootfs
tar xvf rootfs.tar.gz

cd etc

# 这里看到原本 etc 目录下有一个链接文件 dropbear,可以查看 etc/init.d/S50dropbear 获取该文件的解释,这里不用它,因为用它的话将导致每次开机主机的hostkey都不一样,这样导致即使创建了可信任秘钥对,下次板子重启之后客户端登录时由于主机 hostkey 改变依然会认证失败
rm dropbear

mkdir dropbear && cd dropbear

dropbearkey -t dss -f dropbear_dss_host_key
dropbearkey -t ecdsa -f dropbear_ecdsa_host_key
dropbearkey -t rsa -f dropbear_rsa_host_key

3. 为板卡添加可信任秘钥对

以下操作在上位机 ubuntu 执行

ssh-keygen -t rsa # 回车默认

# 该操作将生成 id_rsa(私钥) 和 id_rsa.pub(公钥) 到目录 ~/.ssh/
ls ~/.ssh/
id_rsa  id_rsa.pub  known_hosts  known_hosts.old

# 我们需要将公钥复制到板卡文件系统中并修改其权限
mkdir <your rootfs dir>/root/.ssh/
cp ~/.ssh/id_rsa.pub <your rootfs dir>/root/.ssh/authorized_keys
chmod 0600 <your rootfs dir>/root/.ssh/authorized_keys

4. 使用上述根文件系统启动板卡

使用上位机主机登录板卡时可能会出现如下情况,这是因为之前使用过该主机登陆过该板卡,但刚刚我们换过板卡的host key 导致这是主机认为板卡不可信,只需将host key 删除重写登录即可。

ping 192.168.0.12
ssh root@192.168.0.12

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:iqSrnROCXrKIhng2C+0NI367y7LrVLQH3jFkrzOozKU.
Please contact your system administrator.
Add correct host key in /home/socbis/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/socbis/.ssh/known_hosts:1
  remove with:
  ssh-keygen -f "/home/socbis/.ssh/known_hosts" -R "192.168.0.12"
ECDSA host key for 192.168.0.12 has changed and you have requested strict checking.
Host key verification failed.

删除:ssh-keygen -f "/home/socbis/.ssh/known_hosts" -R "192.168.0.12"

5. 其它问题

在上述配置完成后,依然有可能因为根文件系统权限配置不对仍然无法登录。
我们可以在下位机启动后,查看系统日志分析登录失败原因:tail -f /var/log/messages,如果/root文件夹权限不正确,在其它机器登录时会出现以下log:
Jan 1 06:47:36 buildroot authpriv.info dropbear[1177]: /root must be owned by user or root, and not writable by others
该问题参考链接.
在下位机执行:

chown root /root -R
chgrp root /root -R

如果使用只读文件系统或ramdisk,将上述指令加入到 /etc/init.d/rcS,貌似这是歪门邪道的解决方案,谁知道如何解决根文件系统移植后权限不对的问题啊,MD。

 类似资料: