21、安全与更新:固件更新流程、安全启动配置、SSH密钥管理、系统备份与恢复
说到 Jetson 平台的安全与更新,我脑子里第一个蹦出来的词就是「别翻车」。做嵌入式这么多年,见过太多因为固件更新到一半断电变砖、SSH 密钥泄露被扫、系统崩了没备份只能重头来的惨案。嗯,今天咱们就把这几个硬骨头啃下来。
21.1 固件更新流程
Jetson 的固件更新,说白了就是给板子换「底层系统」。我个人习惯用 SDK Manager 来做,但如果你在产线或者远程环境,那就要用命令行工具了。
21.1.1 使用 SDK Manager 更新
这是最直观的方式。把 Jetson 接到 Host PC,打开 SDK Manager,勾选「Jetson OS」和「Jetson SDK Components」,点下一步就行。但注意——
21.1.2 命令行刷写(适合批量部署)
如果你像我一样喜欢命令行,那这套流程你肯定用得上:
# 进入 JetPack 的 Linux_for_Tegra 目录
cd ~/nvidia/nvidia_sdk/JetPack_5.1.2_Linux_JETSON_ORIN_NX/Linux_for_Tegra/
# 刷写系统(以 Orin NX 为例)
sudo ./flash.sh jetson-orin-nx-devkit mmcblk0p1
这里有个坑——一定要先让板子进入恢复模式。怎么进?按住板子上的 FORCE RECOVERY 键,再按一下 RESET,然后松开。用 lsusb 检查,如果看到 NVidia Corp. 就说明成功了。
bootloader 分区。万一新固件有问题,还能回滚。命令是:sudo ./flash.sh -r -k bootloader jetson-orin-nx-devkit mmcblk0p1
21.2 安全启动配置
安全启动(Secure Boot)这东西,说白了就是给系统加一把锁。只有经过签名的固件才能跑,防止别人往你的板子里塞恶意代码。我在做边缘计算项目时,客户明确要求必须开启,否则不给验收。
21.2.1 生成密钥对
首先,你需要生成自己的 RSA 密钥对:
# 生成私钥
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
# 提取公钥
openssl rsa -pubout -in rsa_private.pem -out rsa_public.pem
21.2.2 烧录安全启动配置
把密钥放到 Linux_for_Tegra 目录下,然后执行:
# 生成安全启动的签名文件
sudo ./flash.sh -u rsa_public.pem -v rsa_private.pem jetson-orin-nx-devkit mmcblk0p1
刷完之后,板子就只认你签名的固件了。别人拿到的板子,就算刷了官方镜像也跑不起来。
21.3 SSH 密钥管理
SSH 密钥这东西,我建议你从一开始就养成好习惯。别用密码登录,太容易被暴力破解了。
21.3.1 生成并部署密钥
在 Host PC 上生成密钥对:
ssh-keygen -t ed25519 -C "jetson-orin-nx"
然后把公钥传到 Jetson 上:
ssh-copy-id -i ~/.ssh/id_ed25519.pub nvidia@192.168.1.100
21.3.2 禁用密码登录
这一步很多人会忘。登录到 Jetson,编辑 /etc/ssh/sshd_config:
# 找到这行,改成 no
PasswordAuthentication no
# 重启 SSH 服务
sudo systemctl restart sshd
21.3.3 多设备密钥管理
如果你管理多台 Jetson,我推荐用 ~/.ssh/config 来管理:
Host orin-nx-1
HostName 192.168.1.101
User nvidia
IdentityFile ~/.ssh/id_ed25519_orin1
Host orin-nx-2
HostName 192.168.1.102
User nvidia
IdentityFile ~/.ssh/id_ed25519_orin2
这样你只需要 ssh orin-nx-1 就能连上,不用记 IP 和密钥路径。
21.4 系统备份与恢复
系统备份,我觉得是每个嵌入式工程师的「后悔药」。你想想看,辛辛苦苦配了大半天的环境,一个误操作把系统搞崩了,如果没有备份,那真是欲哭无泪。
21.4.1 使用 dd 命令备份整个 eMMC/SD 卡
这是最粗暴也最有效的方法:
# 查看 Jetson 的存储设备
lsblk
# 备份(假设设备是 /dev/mmcblk0)
sudo dd if=/dev/mmcblk0 of=~/jetson_backup.img bs=4M status=progress
恢复的时候反过来:
sudo dd if=~/jetson_backup.img of=/dev/mmcblk0 bs=4M status=progress
parted 查看分区表,然后只备份 rootfs 分区。这样镜像会小很多,恢复也快。
21.4.2 使用 tar 备份关键目录
有时候你不需要整个磁盘的镜像,只需要备份配置和用户数据。我常用这个:
# 备份 /etc 和 /home
sudo tar -czf jetson_config_backup.tar.gz /etc /home/nvidia
# 恢复
sudo tar -xzf jetson_config_backup.tar.gz -C /
21.4.3 使用 NVIDIA 官方工具备份
JetPack 自带的 flash.sh 也支持备份:
# 备份当前系统为镜像
sudo ./flash.sh -r -k APP jetson-orin-nx-devkit mmcblk0p1
这个命令会把当前的 rootfs 打包成一个镜像,下次刷写时可以直接用这个镜像恢复。
jetson_backup_20250321.img。这样万一出问题,最多损失一天的工作量。
21.5 知识体系总览
下面这张图,是我自己梳理的安全与更新知识体系。你可以把它当成一个检查清单,看看自己还有哪些没覆盖到。
嗯,以上就是安全与更新的核心内容。固件更新别断电,安全启动管好私钥,SSH 别用密码,系统勤备份。这几条做到了,你的 Jetson 开发环境就能稳如老狗。
公众号:蓝海资料掘金营,微信deep3321