远程访问Raspberry Pi:SSH与VNC
拿到树莓派之后,第一件事是什么?
我个人习惯是先把它“藏”起来——塞到角落里,连上网线电源,然后回到自己的电脑前操作。你想想看,总不能每次调试都搬个显示器和键盘过去吧?
这一章,咱们就聊聊远程访问。说白了,就是把你的笔记本电脑变成树莓派的“远程遥控器”。
SSH:最基础的远程利器
SSH 这东西,做嵌入式的应该都不陌生。它就是个加密的“管道”,让你能安全地在远程设备上敲命令。
我记得刚入行时,有天半夜被电话叫醒,说现场设备连不上。我穿着睡衣,靠 SSH 连到千里之外的设备上,硬是敲了几行命令就修好了。嗯,从那以后我彻底爱上了 SSH。
第一步:在树莓派上启用 SSH
有两种方式——看你的操作系统版本:
| 系统类型 | 启用方法 |
|---|---|
| Raspberry Pi OS(桌面版) | 系统菜单 → Preferences → Raspberry Pi Configuration → Interfaces → 启用 SSH |
| Raspberry Pi OS Lite(无桌面) | sudo raspi-config → Interface Options → SSH → Enable |
| 烧录阶段提前配置 | 在 SD 卡 boot 分区新建一个名为 ssh 的空文件(无扩展名) |
第二步:找到树莓派的 IP 地址
最笨也最实用的方法——登录路由器管理页面,看 DHCP 客户端列表。名字通常是 raspberrypi。
如果你像我一样懒得开浏览器,可以这样做:
- 用 nmap 扫描局域网:
nmap -sn 192.168.1.0/24 - 或者直接用
arp -a看看缓存的 MAC 地址
第三步:连接上去
ssh pi@192.168.1.100
第一次连接会问你要不要接受密钥,打 yes 就行。默认密码是 raspberry。
SSH 密钥认证:一劳永逸的配置
每次输密码虽然能忍,但批量操作时就烦人了。更关键的是——密码登录容易被暴力破解。
我的做法是生成一对密钥:
# 在笔记本上执行
ssh-keygen -t ed25519 -C "my-raspberry-pi"
# 一路回车,不设密码也可以(方便自动脚本)
ssh-copy-id pi@192.168.1.100
搞定之后,再连 SSH 就不用输密码了。而且 ed25519 比 RSA 更安全、更短。我个人后来全部换成了这个算法。
SSH 的“高级玩法”:端口转发
部署 llama.cpp 时,经常需要把树莓派上的某个服务映射到本地。比如 llama.cpp 的 API 跑在 8080 端口,你不想在局域网暴露它。
ssh -L 8080:localhost:8080 pi@192.168.1.100
这样你在笔记本上打开 http://localhost:8080,就能直接访问树莓派上的服务了。全程加密传输,别人嗅探不到。
VNC:给树莓派装上“远程桌面”
SSH 虽好,但有时候你就是想看看图形界面。比如调试 OpenCV 的显示效果,或者用 GUI 工具配置某些参数。
VNC 的原理很简单——树莓派把屏幕画面压缩了,通过网络传给你。你这边看到的就跟坐在树莓派前一样。
VNC 方案对比
| 方案 | 特点 | 推荐场景 |
|---|---|---|
| RealVNC(内置) | 系统自带,开箱即用;但需要注册账号 | 简单体验,不想折腾 |
| TightVNC | 轻量级,带宽占用小;但功能略少 | 网络不好、只传简单画面 |
| x11vnc | 直接复用当前物理屏幕 | 需要看到跟显示器一模一样的画面 |
我个人做 llma.cpp 部署时,常用 x11vnc。因为它能看到模型的实时输出,不会搞混虚拟桌面和物理桌面。
安装和配置 x11vnc
# 树莓派上执行
sudo apt update
sudo apt install x11vnc
# 设置连接密码(以后连 VNC 要用)
x11vnc -storepasswd
# 启动服务:共享当前桌面
x11vnc -forever -shared -passwd-file ~/.vnc/passwd
然后在你笔记本上打开 VNC Viewer,输入树莓派的 IP 地址加端口 :5900,就能看到桌面了。
避坑指南:SSH 和 VNC 常见问题
- SSH 连不上? 先确认 IP 地址对不对,再检查树莓派的 SSH 服务有没有启动。我经常犯的错误是路由器改了网段结果忘了更新 IP。
- VNC 画面卡顿? 降低颜色深度或分辨率。在 x11vnc 启动参数加
-qscale 3可以平衡画质和流畅度。 - 端口被防火墙挡了? 确认路由器或树莓派本身的防火墙没有拦截 22(SSH)和 5900(VNC)端口。
- 密钥认证失败? 检查
~/.ssh目录权限是否为 700,公钥文件的权限是否为 600。权限不对会让 SSH 直接拒绝。
远程访问这件事,说白了就是让你的操作半径从一米变成无限。我在客户现场接过无数紧急支援电话,靠的就是 SSH 这根“救命稻草”。
掌握好 SSH 和 VNC,你的树莓派就不再是桌上那个小盒子——它变成了一台随时听候调度的远程服务器。后续部署 llama.cpp 时,你会发现这些基础能力有多关键。