树莓派与嵌入式设备远程连接实战:从SSH到VNC的完整指南

📅 2026/8/2 16:41:15
树莓派与嵌入式设备远程连接实战:从SSH到VNC的完整指南
1. 项目概述为什么我们需要远程连接树莓派如果你手头有一台树莓派Raspberry Pi或者类似jetson reComputer这样的嵌入式开发板那么“远程连接”这个操作几乎是你玩转它的第一步。想象一下你的小电脑板子可能被放在客厅的电视后面当媒体中心或者被固定在某个角落运行着智能家居程序甚至被塞进机器人肚子里。你不可能每次都给它接上显示器、键盘鼠标去操作那太麻烦了。远程连接就是让你能从你日常使用的、更强大的主力电脑比如你的Windows笔记本或Mac上通过网络去完全控制它就像你正坐在它面前一样。这不仅仅是方便更是嵌入式开发和运维的基石。通过SSHSecure Shell协议你可以在命令行里安装软件、修改配置、运行脚本、查看日志。更进一步通过VNC或RDP你还能看到它的图形化桌面进行更直观的操作。对于reComputer这类搭载了NVIDIA Jetson模块、专注于边缘AI计算的设备远程连接更是开发和部署模型的唯一高效途径——你总不能在它小小的屏幕上用鼠标点来点去调试复杂的Python代码和神经网络吧所以无论你是想把它变成家庭服务器、物联网网关、深度学习推理终端还是单纯的学习Linux和编程掌握远程连接到你的树莓派或reComputer是解锁其全部潜力的钥匙。接下来我会以一个从业多年的嵌入式开发者的视角带你从零开始深入每一个细节搞定远程连接并分享那些只有踩过坑才知道的经验。2. 核心思路与方案选型SSH是起点但不是终点远程连接方案众多选择哪种取决于你的具体需求。我们必须先理清思路才能不走弯路。2.1 核心需求解析命令行 vs. 图形界面远程连接的核心需求可以归结为两类命令行操作CLI这是最基础、最常用、也是最高效的方式。你需要通过一个终端输入命令来控制远程设备。几乎所有系统管理和软件开发工作都在这里完成。对应的协议就是SSH。图形界面操作GUI当你需要运行带有图形界面的程序比如一些配置工具、浏览器或者你想使用完整的桌面环境时就需要图形化的远程桌面。常见的协议有VNC和XRDP。对于树莓派和reComputer我的建议永远是优先确保SSH畅通图形界面按需配置。SSH是生命线它稳定、占用资源少并且能完成99%的工作。图形远程桌面通常作为补充用于那些必须用图形界面的场景。2.2 方案对比与选型理由为什么SSH是首选我们对比一下SSH (Secure Shell)优点加密传输安全性高纯文本传输带宽占用极低通常几个KB/s即使在网络状况不佳时也能流畅操作几乎所有的Linux发行版包括Raspberry Pi OS都默认安装或极易安装SSH服务端可以通过它建立隧道进行端口转发、文件传输SFTP等高级操作。缺点只能操作命令行对于图形程序无能为力。适用场景系统配置、软件安装、代码编辑与运行、日志查看、文件管理配合SFTP、服务管理等几乎所有开发运维工作。VNC (Virtual Network Computing)优点跨平台客户端丰富可以远程看到完整的桌面环境。缺点默认配置下传输未加密可通过隧道解决画面流畅度和延迟非常依赖于网络带宽和编码设置需要先在设备上启动一个桌面会话。适用场景偶尔需要操作图形化设置界面或运行某个带GUI的特定应用。XRDP (Remote Desktop Protocol for X)优点使用微软RDP协议Windows用户无需安装额外客户端使用自带的“远程桌面连接”在某些情况下效率可能比VNC高。缺点配置稍复杂它实际上是创建一个新的桌面会话而不是共享现有的那个这有时会导致混淆。适用场景主要工作环境是Windows且希望使用系统自带工具进行图形化远程。我的选择与理由 对于开发和日常管理“SSH VS Code Remote-SSH扩展”是当前最强大、最舒适的方案。你可以在本地VS Code里获得近乎本地开发的体验却能直接编辑和运行远程设备上的代码。图形界面需求我则推荐在SSH畅通后根据需要安装RealVNC树莓派官方推荐并已集成或TigerVNC。因此本指南将重点放在SSH的打通与优化上并涵盖图形化方案的备选。3. 前期准备让设备可被“发现”与连接在你能远程连接之前你的树莓派/reComputer必须已经接入网络并且你知道如何找到它。3.1 硬件与初始网络配置系统烧录与首次启动使用Raspberry Pi Imager工具将Raspberry Pi OS或Ubuntu for Raspberry Pi/Jetson烧录到SD卡。关键一步在烧录前Imager工具允许你进行“高级设置”按CtrlShiftX。在这里你可以预先设置主机名如raspberrypi.local。启用SSH服务。设置用户名和密码。配置Wi-Fi国家和SSID密码。 这样做可以让你在第一次启动时设备就自动连接网络并开启SSH实现“无头启动”Headless完全不需要接显示器。获取设备IP地址这是连接的前提。有几种方法路由器后台查看登录你家路由器的管理页面通常是192.168.1.1或类似在“已连接设备”或“DHCP客户端列表”中根据主机名如raspberrypi查找其IP地址。这是最可靠的方法。使用mDNS主机名连接如果设备系统和网络支持mDNSBonjour/Avahi你可以直接使用主机名.local来访问。例如树莓派默认主机名是raspberrypi那么地址就是raspberrypi.local。在Mac和安装了Bonjour的Windows上通常可以直接使用。Linux则需要安装avahi-daemon。接显示器查看如果上述都不可行临时接上显示器打开终端输入hostname -I命令即可显示IP地址。reComputer的特殊性以NVIDIA Jetson为核心的reComputer其系统通常是JetPack SDK基于Ubuntu。首次启动可能需要通过USB连接进行初始设置。在设置过程中务必连接到与你的工作电脑相同的局域网有线或无线并记下系统分配的IP地址。3.2 本地SSH客户端准备你的工作电脑需要SSH客户端。macOS 和 Linux系统自带打开“终端”Terminal即可使用。Windows 10/11较新版本已内置OpenSSH客户端。在PowerShell或CMD中尝试输入ssh如果出现用法提示则已安装。如果没有可以通过“设置”-“应用”-“可选功能”-“添加功能”来安装“OpenSSH 客户端”。更推荐的做法是使用 Windows Terminal 和 WSL2Windows Subsystem for Linux这样你可以获得一个完整的Linux Bash环境使用体验与Mac/Linux一致。注意避免使用来源不明或过于陈旧的SSH客户端工具。系统自带的或官方渠道下载的OpenSSH是最安全、兼容性最好的选择。4. 建立SSH连接从基础到高效一切就绪让我们开始连接。4.1 首次密码连接打开你工作电脑的终端Windows下可以是PowerShell、CMD或WSL终端输入以下命令ssh usernamehostname_or_ip例如使用IP地址ssh pi192.168.1.100使用主机名ssh piraspberrypi.local这里pi是树莓派默认用户名reComputer JetPack系统默认用户名通常是nvidia。hostname_or_ip就是你上一步找到的地址。首次连接时你会看到类似如下的提示The authenticity of host 192.168.1.100 (192.168.1.100) cant be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])?这是SSH的安全特性它在问你“我从未连接过这个主机现在它给了我一个指纹你确认要信任它吗” 输入yes并回车。之后输入对应用户的密码树莓派默认密码是raspberryreComputer JetPack默认密码在初始设置时设定。密码输入时屏幕不会有任何显示这是正常的输完回车即可。成功登录后终端提示符会变成远程设备的样子例如piraspberrypi:~ $。恭喜你现在已经在远程操作你的设备了4.2 配置SSH密钥免密登录强烈推荐每次连接都要输密码太麻烦也不利于自动化脚本。SSH密钥对是实现免密登录又称密钥认证的标准方式。1. 在本地电脑生成密钥对如果你还没有ssh-keygen -t ed25519 -C your_emailexample.com-t ed25519指定使用更安全、更快的Ed25519算法。你也可以使用-t rsa -b 4096。命令执行中会询问你密钥保存路径直接回车用默认位置~/.ssh/id_ed25519和设置密钥密码passphrase。为方便起见可以留空直接回车但设置一个密码会更安全。2. 将公钥上传到远程设备 有两种常用方法方法一使用ssh-copy-id命令最简单ssh-copy-id usernamehostname_or_ip输入一次密码后它就会自动帮你完成所有操作。方法二手动复制适用于所有系统 首先在本地查看公钥内容cat ~/.ssh/id_ed25519.pub。 然后登录远程设备编辑授权文件nano ~/.ssh/authorized_keys将刚才复制的公钥内容一整行粘贴到文件末尾保存退出。3. 验证免密登录 退出当前SSH会话输入exit然后再次尝试连接ssh usernamehostname_or_ip。如果配置正确你将无需输入密码直接登录。实操心得务必妥善保管你的私钥~/.ssh/id_ed25519它相当于你的数字身份。不要将它发送给任何人或上传到公开仓库。公钥.pub文件则是可以随意分发的。4.3 优化SSH客户端配置为了连接更便捷可以配置本地的SSH客户端配置文件~/.ssh/config。nano ~/.ssh/config添加如下内容Host rpi # 一个简短的别名你可以随意起名 HostName raspberrypi.local # 或者具体的IP地址 User pi # 默认用户名 IdentityFile ~/.ssh/id_ed25519 # 指定使用的私钥文件 # 可选端口如果不是默认的22可以加 Port 2222保存后你只需要输入ssh rpi就能直接连接系统会自动使用指定的主机名、用户名和密钥。5. 进阶使用VS Code进行远程开发这是将远程连接体验提升到“开发级”的关键一步。Visual Studio Code的Remote - SSH扩展允许你将本地VS Code变成一个强大的远程开发终端和编辑器。5.1 安装与配置在本地VS Code中安装扩展 “Remote - SSH” (由Microsoft发布)。安装后左侧活动栏会出现一个远程资源管理器图标。点击它选择“SSH Targets”。点击旁边的齿轮设置图标选择你的SSH配置文件通常是~/.ssh/config。如果你之前配置过~/.ssh/config这里会自动列出你定义的Host如上面的rpi。在你想要连接的Host如rpi上右键选择 “Connect to Host in Current Window” 或 “Connect to Host in New Window”。VS Code会在新窗口中打开并在底部状态栏显示“SSH: rpi”。第一次连接可能需要一点时间因为它会在远程设备上安装一个轻量级的VS Code Server。连接成功后你就可以像操作本地文件一样通过左侧“资源管理器”打开远程设备上的文件夹使用内置终端已经是SSH连接后的远程终端安装针对远程环境的扩展如Python扩展并直接运行和调试代码。所有计算都在远程设备上执行而编辑体验在本地。5.2 使用技巧与排错指定远程工作目录在~/.ssh/config中可以为Host增加配置RemoteCommand cd /path/to/your/project bash这样连接后会自动进入项目目录。扩展安装有些扩展如代码高亮、语法提示需要在本地安装而像Python、C这种语言服务或调试器则需要在远程端安装。VS Code会智能提示你。连接失败如果VS Code连接失败首先尝试在系统终端里用纯SSH命令ssh rpi看是否能通。确保远程设备有互联网连接以下载VS Code Server。有时防火墙或代理设置也会造成问题可以尝试在VS Code的SSH设置中启用“Remote.SSH: Use Local Server”选项。6. 图形化远程桌面配置VNC当你确实需要图形界面时可以配置VNC。6.1 在树莓派上启用VNC树莓派官方镜像已集成RealVNC服务这是最简单的方式。通过SSH登录树莓派。运行sudo raspi-config。选择Interface Options-VNC-Yes启用。你还可以在System Options-Resolution中设置一个合适的分辨率如1920x1080这对于远程桌面流畅度很重要。完成后重启树莓派或运行sudo systemctl start vncserver-x11-serviced。6.2 在reComputer (Jetson) 上安装VNC ServerJetson系统默认可能没有VNC。我们可以安装TigerVNC。SSH登录reComputer。安装TigerVNC Serversudo apt update sudo apt install tigervnc-standalone-server tigervnc-common -y首次运行需要设置一个VNC连接密码vncpasswd启动一个VNC服务器实例指定显示号和分辨率vncserver :1 -geometry 1920x1080 -depth 24:1表示显示号1对应的端口号是590159001。你可以用:2对应5902端口。命令会输出日志告诉你服务运行在哪个端口。6.3 使用VNC客户端连接在本地电脑下载VNC客户端如RealVNC Viewer、TigerVNC Viewer。地址栏输入设备IP地址:端口号例如192.168.1.100:5901。输入你设置的VNC密码。成功连接后你就能看到远程设备的桌面了。注意事项VNC的默认传输是不加密的。在不可信的网络中使用时强烈建议通过SSH隧道来加密VNC流量。你可以使用命令ssh -L 5901:localhost:5901 usernamehostname_or_ip在本地和远程之间建立一个安全隧道然后在VNC客户端中连接localhost:5901。7. 常见问题与排查技巧实录远程连接看似简单但网络环境复杂总会遇到各种问题。这里记录一些典型场景和我的排查思路。7.1 连接超时或“Connection refused”现象ssh命令长时间等待后报错Connection timed out或者立刻报错Connection refused。排查思路确认IP/主机名首先百分之百确认你输入的IP地址或主机名是正确的。再次登录路由器后台核对。检查网络连通性在本地电脑ping一下设备的IP地址。如果ping不通说明网络层就不通。可能原因设备没开机、网线没插好、Wi-Fi没连上、设备在另一个子网。解决检查设备电源和网络连接。检查SSH服务状态如果ping得通但SSH连不上可能是SSH服务没运行。你需要通过物理方式接显示器登录设备检查服务sudo systemctl status ssh。如果没运行启动它sudo systemctl start ssh并设置开机自启sudo systemctl enable ssh。检查防火墙设备本身可能设置了防火墙规则阻止了22端口SSH默认端口。树莓派Raspberry Pi OS默认防火墙ufw是关闭的。但如果你或某些脚本启用过它需要放行22端口sudo ufw allow 22。检查端口是否监听在设备上运行sudo netstat -tlnp | grep :22查看22端口是否被sshd进程监听。7.2 认证失败“Permission denied”现象连接时提示Permission denied (publickey,password).排查思路用户名或密码错误这是最常见的原因。仔细核对用户名注意大小写和密码。树莓派默认是pi和raspberry。SSH服务配置禁止密码登录如果之前修改过/etc/ssh/sshd_config文件设置了PasswordAuthentication no那么只能使用密钥登录。如果你还没配置密钥就会报错。临时解决通过其他方式登录设备修改该配置为yes后重启SSH服务sudo systemctl restart sshd。密钥认证问题如果配置了密钥但依然失败。检查远程设备~/.ssh/authorized_keys文件权限必须是600仅用户可读写chmod 600 ~/.ssh/authorized_keys并且~/.ssh目录权限必须是700。检查本地私钥文件权限过于开放的权限如其他用户可读SSH客户端会出于安全拒绝使用。使用ssh -v usernamehostname命令查看详细的连接过程日志通常在最后会提示具体的失败原因。7.3 VS Code Remote-SSH 连接失败现象VS Code卡在“Setting up SSH Host XX: Copying VS Code Server to host...”或者报错“Failed to install VS Code Server”。排查思路网络问题远程设备需要从GitHub下载VS Code Server。如果设备处于内网无法访问外网就会失败。可以尝试在能访问外网的机器上手动下载 server 包然后通过SCP传到设备上但过程较复杂。手动选择Server版本在VS Code的SSH配置中可以设置“remote.SSH.remotePlatform”和“remote.SSH.serverInstallPath”但更有效的是使用“remote.SSH.enableDynamicForwarding”: false试试有时能解决网络问题。查看日志在VS Code的命令面板CtrlShiftP输入 “Remote-SSH: Show Log”查看详细输出能定位到具体错误步骤。最直接的备选方案如果VS Code Remote-SSH配置始终不成功不要纠结。退而使用纯SSH终端连接配合本地的VS Code通过SFTP扩展同步文件或者使用rsync命令同步虽然体验稍差但绝对可靠。7.4 连接缓慢或间歇性断开现象输入命令反应慢或者经常断线重连。排查思路DNS查找问题SSH服务端可能会对客户端IP进行反向DNS解析如果解析慢或失败会导致连接建立缓慢。可以在服务端/etc/ssh/sshd_config中增加UseDNS no来禁用然后重启SSH服务。网络质量差无线网络不稳定、带宽拥塞都会导致此问题。尽量使用有线网络以太网连接开发板这是最稳定的方式。客户端保活设置在本地SSH配置文件~/.ssh/config中为你的Host添加以下参数让客户端定期发送保活包防止连接因网络设备超时而被切断Host rpi ... ServerAliveInterval 60 # 每60秒发送一次保活包 ServerAliveCountMax 3 # 服务器最多3次无响应后才断开8. 安全加固与最佳实践将设备暴露在网络上安全不容忽视。以下是一些基本但至关重要的措施。8.1 修改默认密码与创建新用户树莓派的默认用户名pi和密码raspberry是公开的秘密。第一步就是修改它。通过SSH登录后运行passwd命令修改当前用户的密码。更推荐创建一个新的管理员用户并禁用pi用户sudo adduser your_new_username # 创建新用户按提示设置密码等信息 sudo usermod -aG sudo your_new_username # 将新用户加入sudo组获得管理员权限 # 测试用新用户登录并执行sudo命令无误后再锁定pi用户 sudo passwd -l pi # 锁定pi用户禁止其登录 # 如果需要彻底删除谨慎操作sudo deluser --remove-home pi8.2 更改默认SSH端口将SSH服务从默认的22端口改到一个非标准端口如2222可以避免被互联网上自动化脚本的批量扫描和攻击。编辑SSH服务端配置sudo nano /etc/ssh/sshd_config找到#Port 22这一行去掉注释#并将22改为你想要的端口号例如Port 2222。保存文件重启SSH服务sudo systemctl restart ssh重要在重启前务必确保你当前的SSH连接会话不要关闭先开一个新的终端窗口用新端口ssh -p 2222 usernamehostname测试连接成功后再关闭旧会话。否则一旦配置错误你可能被关在门外。同时如果开启了防火墙记得放行新的端口sudo ufw allow 2222。8.3 禁用root用户SSH登录和密码认证绝对禁止root用户直接通过SSH登录并且推荐完全禁用密码认证只允许密钥登录。继续编辑/etc/ssh/sshd_config。确保以下配置PermitRootLogin no # 禁止root登录 PasswordAuthentication no # 禁用密码认证 PubkeyAuthentication yes # 启用公钥认证默认就是yes保存并重启SSH服务。警告在设置PasswordAuthentication no之前必须确保你的用户公钥已经成功添加到~/.ssh/authorized_keys中并且可以免密登录。否则你会永久失去SSH访问权限8.4 使用Fail2ban防止暴力破解Fail2ban可以监控系统日志当发现同一个IP在短时间内多次进行失败的登录尝试如SSH密码错误时自动将其IP加入防火墙黑名单一段时间。安装sudo apt install fail2ban -y复制默认配置文件sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local编辑jail.local在[sshd]部分确保enabled true。你可以调整bantime禁止时间、findtime查找时间窗口和maxretry最大重试次数等参数。启动并启用服务sudo systemctl start fail2ban sudo systemctl enable fail2ban经过以上步骤你的树莓派或reComputer的远程连接就既方便又相对安全了。从最基础的SSH密码登录到配置密钥实现快速连接再到利用VS Code获得顶级开发体验最后补充图形化需求和加固安全这套流程覆盖了从入门到进阶的完整路径。记住网络配置是基础SSH是核心工具而安全意识必须贯穿始终。多动手尝试遇到问题善用ssh -v查看日志和搜索引擎这些技能会伴随你所有的运维和开发工作。