ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

树莓派无头配置完全指南:从SD卡写入WiFi到SSH成功连接

树莓派无头配置完全指南:从SD卡写入WiFi到SSH成功连接 1. 为什么树莓派“无头”让很多人卡在第一步先说清楚什么叫无头配置。就是你手里的树莓派没有接显示器、没有接键盘鼠标甚至连网线都懒得插只给它一张SD卡和一根电源线它却能自己连上家里的WiFi然后你从电脑上用SSH登录进去操作。对于做嵌入式开发、临时搭个测试节点、或者学生党做课程设计的人来说这是最省事也是最常见的玩法树莓派往角落一塞通过WiFi远程访问完全不需要额外占用一个显示器和键鼠套装。但这套流程对新手来说坑特别多。我见过太多人卡在同一个地方系统刷好了SD卡插进树莓派电源一接路由器后台死活看不到新设备或者能看到IP但SSH连不上。然后就开始怀疑是不是树莓派坏了、是不是SD卡坏了、是不是固件版本问题。其实绝大多数情况根本不是硬件问题而是你没有在烧录系统之后、上电之前把WiFi配置和SSH开关提前写进SD卡的正确位置。树莓派官方其实提供过一个工具叫 Raspberry Pi Imager新版里面有一个“高级选项”可以在烧录时直接设置WiFi、开启SSH、设置主机名但很多人根本不知道这个入口或者用的还是旧版工具更常见的是你已经烧好了系统想临时改成WiFi连接这时候就得手动修改SD卡上的文件。这篇文章要做的就是把这个过程完整走一遍从SD卡的分区结构讲起到手动写入WiFi配置再到启用SSH、发现IP、成功连接每一步都拆开说明白顺便把我踩过的坑也一并交代了。不管你是用树莓派4B、5代、还是Zero 2W这套思路基本通用区别只在分区编号和个别文件路径上会有细微不同。整个过程不需要太多Linux基础只要你会用文本编辑器和命令行跟着做基本都能成。2. 动手前的准备SD卡烧录与硬件检查2.1 烧录工具和镜像版本怎么选先把基础工作做扎实。树莓派官方系统目前推荐用 Raspberry Pi Imager 烧录这工具跨平台Windows、macOS、Linux都有。我用它烧过很多张卡最大的感受是它把“下载镜像—校验—写入SD卡—配置预置参数”整合成了一条流水线对新手特别友好。当然你也完全可以用 balenaEtcher 或者命令行 dd 烧录原理都是一样的。镜像选择上我建议优先选 Raspberry Pi OS32位或64位看实际需求不要一上来就搞 Ubuntu 或者第三方系统。并不是说 Ubuntu 不行而是树莓派官方系统对无头配置的支持最完善默认行为最可预测尤其是我们下面要讲的“改SD卡文件实现WiFi配置”这套方法在官方系统上几乎零障碍。如果你特别想装 Ubuntu也可以文章后面的配置文件写法基本通用但某些细节可能要微调。烧录时有三个细节值得注意。第一SD卡容量至少8GB正规品牌最好杂牌卡容易出现烧录完成后校验失败或者上电后文件系统损坏的问题。第二烧录前确认SD卡数据不需要保留烧录过程会全盘覆写没有后悔药。第三烧录完成后不要急着拔卡先看下面这一步。2.2 官方烧录器里那个容易被忽略的高级选项如果你用的是新版 Raspberry Pi Imager在点击写入之前右下角或者右上角会有一个齿轮图标这个就是“高级选项”。点进去之后可以看到一堆可配置项开启SSH、设置用户名密码、配置WiFi、设置主机名等。这块是官方给无头用户留的正门我强烈建议第一次接触树莓派的用户从这里入手因为它做了一件手动改文件很难做利落的事情它在烧录阶段就把你的WiFi凭据和SSH配置注入到系统里并且会校验WiFi国家码等参数避免后续因为区域设置导致WiFi连接失败。但是很多人的实际需求是我已经烧好了一张卡不想再重新烧一遍或者我当时用的旧版工具没有这个高级选项。这时候就需要手动修改SD卡了。还有一种情况是你买了一张预制好的SD卡比如商家帮你烧好了系统你也得用这种方法调整WiFi配置。所以手动修改SD卡这个“老办法”始终有它的价值学会了之后不管什么状态都能救得回来。2.3 上电前的硬件检查清单SD卡烧好后先别急着插树莓派。检查一下这几项能省掉后面很多排查时间USB电源是否满足需求树莓派4B建议5V/3A5代更是要选正规电源电源不足会导致WiFi模块工作不稳定或者频繁重启。有没有可用的USB转TTL调试串口如果没有也不强求后面有纯软件排查方案。电脑和树莓派是否连接在同一个局域网内这个最关键两个设备都不在同一个网段的话SSH怎么也连不上。路由器是否开启了AP隔离有些路由器开启这个功能之后连上同一个WiFi的设备之间互相无法访问树莓派能联网但电脑ping不到它。这些检查看起来琐碎但每一环都可能变成致命问题。我遇到过最无语的一次折腾了半个小时发现是路由器开了AP隔离当时真是想把路由器扔出去。3. 核心实操从SD卡修改WiFi配置到SSH连接3.1 认识SD卡上的boot分区和rootfs分区SD卡烧录完系统后插回电脑上建议用读卡器直连不要用延长线你会看到Windows系统弹出提示说无法访问某些分区这是正常现象。树莓派的Linux系统SD卡一般分为两个主要分区boot分区和rootfs分区。boot分区是FAT32格式Windows可以直接识别和访问里面放着引导加载程序、内核镜像、设备树文件等启动必需内容。关键点在于树莓派的GPU对你没看错树莓派的启动过程是GPU先跑会读取这个分区来做硬件初始化。rootfs分区是ext4格式里面是完整的Linux根文件系统Windows默认访问不了不过我们今天不需要动它只需要修改boot分区里的文件就能完成WiFi配置和SSH开启。这其实是树莓派一个特别方便的设计完全不需要在屏幕上敲命令只要你能往boot分区里放文件就等于能够在系统启动前“注入”配置。无头配置的核心思想就是这样通过修改SD卡上特定文件让树莓派在第一次启动时就自动连接WiFi并开启SSH服务。3.2 手动创建 wpa_supplicant.conf 的完整写法在boot分区里面新建一个文本文件名字必须是 wpa_supplicant.conf一个字母都不能差。这个文件是Linux下wpa_supplicant工具的配置文件树莓派的网络管理服务在启动时会读取它来连接无线网络。文件内容分成三部分国家代码、网络配置、以及可选的网络优先级。最基本的写法如下ctrl_interfaceDIR/var/run/wpa_supplicant GROUPnetdev update_config1 countryCN network{ ssid你的WiFi名字 psk你的WiFi密码 key_mgmtWPA-PSK priority1 }逐行说下每个参数的作用。ctrl_interface这行指定了wpa_supplicant进程的控制接口路径GROUPnetdev是让netdev用户组的成员可以操作WiFi连接这个对后面的故障排查有用。update_config1允许系统在某种情况下更新这个配置文件比如通过wpa_cli命令修改网络。countryCN不能省树莓派会根据这个设置来配置WiFi模块的频段合规参数如果没设置或者设置错误5GHz频段的WiFi可能扫描不到这也是很多人的WiFi连不上5G信号的原因。network块里ssid就是你家的WiFi名称注意区分大小写。psk是对应的密码。key_mgmtWPA-PSK说明采用WPA/WPA2个人认证这是绝大多数家庭路由器的默认模式。如果你用的WiFi是企业级认证比如公司网络写法会不一样那属于进阶场景家庭使用一般用不上。priority1是网络优先级数值越大越优先连接如果你有多个WiFi网络配置这个参数就很有用。保存文件时有几个细节需要注意。如果是Windows系统新建文本文件默认会有.txt扩展名一定要把名字改成wpa_supplicant.conf而不是wpa_supplicant.conf.txt。用Notepad或者VS Code这类编辑器保存不要用Windows自带的记事本因为记事本默认编码是UTF-8 with BOM某些情况下会导致这个配置文件解析失败。最好还是用VS Code选择UTF-8无BOM编码保存。文件编辑完成后确认它直接位于boot分区的根目录下不要放到子文件夹里面。3.3 无头模式下开启SSH的两种方法WiFi配置写好了SSH默认还是关闭状态必须手动开启。树莓派从某个版本开始默认禁用了SSH服务这是出于安全考虑。在无头模式下有两种方式开启。第一种最直接在boot分区根目录下新建一个空文件名字就叫ssh没有扩展名内容可以完全为空。树莓派启动时检查到boot分区存在这个文件就会自动启用SSH服务。这个文件是一个标志性文件系统检测到存在即执行开启操作文件里面的内容是什么不重要。在Windows下创建一个没有扩展名的文件需要注意如果你右键新建文本文件再改名为ssh系统可能还是坚持它是ssh.txt需要在文件管理器里开启“显示文件扩展名”选项然后完整重命名。第二种方式是在烧录时通过Raspberry Pi Imager的高级选项开启SSH这适合还没有烧录的新卡。但对已经烧好的卡就用第一种方式。两种方式不冲突你可以双保险都用上。如果对默认用户有要求树莓派官方系统还有一个特殊机制如果你没有通过Imager的高级选项设置用户名密码系统默认用户名是pi默认密码是raspberry。但从某个版本开始官方强制要求新用户设置账号如果在无头模式下第一次启动时发现没有账号它可能会拒绝启动SSH。这种情况下最稳妥的做法是在boot分区下新建一个userconf.txt文件里面写上“用户名:加密后的密码”。加密后的密码怎么生成在Linux或macOS上可以执行echo mypassword | openssl passwd -6 -stdin在Windows上相对麻烦一点你可以用在线工具生成或者借用同局域网内另一台Linux机器完成。生成结果形如 $6$salt$hash然后把用户名和这个哈希值按 用户名:哈希 的格式写入userconf.txt即可。有了这个文件树莓派第一次启动时会自动创建对应用户并且SSH也可以用这个账号登录。3.4 SD卡插回树莓派首次启动后的时间线做完以上修改把SD卡安全弹出插到树莓派上接好电源。接下来发生的事值得你等一会儿树莓派并不是瞬间完成启动的。第一个阶段绿灯或黄灯常亮此时引导加载程序正在运行读取SD卡上的配置。第二个阶段绿灯开始闪烁代表内核正在解压运行。第三个阶段大概几秒后系统里配置的WiFi连接开始生效路由器后台会看到新设备接入。整个过程少则30秒多则2分钟取决于SD卡的速度和系统版本。有一个常见误解是绿灯闪烁就说明系统启动成功了。不完全准确绿灯闪烁只代表SD卡有读写活动。如果你写的wpa_supplicant.conf格式错误系统仍然能启动但WiFi连不上如果你是物理网线连接的SSH当然能通但WiFi就是死活不行。所以启动完成后不要急给系统一点时间让它把网络服务完全跑起来。启动完成后下一步就是找到树莓派的IP地址。4. 找到树莓派IP并完成SSH登录4.1 IP地址发现路由器后台、mDNS、抓包三管齐下最理想的情况是登录路由器管理后台查看DHCP客户端列表找到主机名类似raspberrypi的设备记录它的IP地址。这是最稳妥、最直观的方法。路由器管理地址一般是192.168.1.1或者192.168.0.1不同品牌略有差异进入后找“客户端列表”或“已连接设备”页面就能看到。但是有些环境下你根本进不了路由器后台比如公司网络、宿舍路由管理密码不知道那就需要用mDNS。树莓派系统默认开启了mDNS服务基于Avahi主机名是raspberrypi.local因此在macOS或者装了Bonjour服务的Windows电脑上可以直接用这个地址来连接。在macOS或Linux终端执行ping raspberrypi.local在Windows上许多系统自带了对mDNS的支持cmd或PowerShell也支持这个命名解析前提是系统服务里mDNS响应正常运行。如果这个方法不行还可以用完全免费的手机App比如Fing这个App扫描局域网内设备特别方便能快速发现新上线的树莓派。还有一招是抓包并不是所有场景都用得上但当你实在找不到设备而且电脑有WiFi网卡时可以开启Wireshark抓取ARP广播树莓派被访问时会有ARP请求暴露它的IP。4.2 SSH连接工具与基础命令拿到IP地址之后剩下的就是SSH连接。如果你用的是Windows 10/11系统自带的OpenSSH客户端可以直接在PowerShell或Windows Terminal里使用不用额外装任何软件。在终端里执行ssh pi192.168.1.100将IP换成你实际查到的地址用户名根据你之前的配置填写。第一次连接时系统会提示你确认主机的指纹输入yes回车然后输入密码即可登录。如果你之前通过userconf.txt设置了自定义用户就换成对应的用户名。如果你更习惯图形化界面可以装MobaXterm、Xshell个人版免费、FinalShell或Termius这类SSH客户端。MobaXterm是我用的比较顺手的它自带SFTP文件管理功能可以直接拖文件到树莓派上省去学scp命令的时间成本。但有些人喜欢Xshell的开发人员配色也有人喜欢用Windows Terminal加上自己的配置SSH客户端的选项太多不必纠结哪个最好选一个顺手的长用就行。登录进去以后建议先跑三个命令确认当前状态hostname -I 显示当前IP地址确认连接的目标没错。cat /etc/os-release 查看系统版本。lsblk 查看分区挂载情况确认SD卡分区是否正常。这三条命令的意义在于它们能让你在动手做任何修改前先确认系统的“底色”。很多教程会直接让你改这改那但如果你连自己系统的版本和结构都不清楚后面踩了坑就很难排查。尤其是换源、装软件这类操作不同系统版本的命令和软件源差异很大。4.3 首次登录后建议立刻做的几件小事登录成功只是第一步为了让树莓派用得更舒服还有几件事值得在首次登录后马上做。第一个是修改默认密码。网上有很多教程默认密码还是raspberry如果你保持默认密码并开启了SSH在局域网内任何人都能轻松连到你的设备上做手脚。执行passwd命令就能修改当前用户的密码然后SSH会强制重新登录。第二个是更新系统和软件包。执行 sudo apt update sudo apt upgrade -y 这个过程可能比较久但值得做安全补丁和软件库的更新能让后续安装软件时少很多麻烦。第三个是考虑设置静态IP或者DHCP保留地址。如果DHCP分配的IP经常变化你就得每次登录前先去查一下路由器后台。设置静态IP有几种方式一种是在路由器后台给树莓派的MAC地址绑定固定IP另一种是在树莓派系统里修改网络配置。对无头用户来说我更推荐在路由器侧做绑定这样即使系统重刷只要树莓派硬件不变IP还是原来的。5. 常见问题与排查技巧实录5.1 WiFi连接失败配置文件格式与文件名是重灾区我见过最多的失败原因基本上就三类文件名不对、文件内容格式不对、系统没有执行到配置文件。先说文件名boot分区里必须严格命名为wpa_supplicant.conf。有时候用户确实创建了这个文件但在Windows下改名时留下了.txt后缀变成wpa_supplicant.conf.txt。这是一个可以尝试的操作来确认你是否也踩了这个坑在Windows的文件夹选项里勾选“显示已知文件类型的扩展名”然后看看boot分区里这个文件名到底是什么样的。这个过程我被折磨过很多次因为我默认在macOS下工作没有这个问题但帮朋友排查时几乎每一次都是这个原因。关于wpa_supplicant.conf内容格式还有一个隐藏陷阱Windows记事本默认的换行符是CRLFLinux程序解析时对CRLF的容忍性并不总是很好。如果内容被识别出错WiFi可能一直连不上。更稳妥的编辑方案是使用VS Code或者Notepad这类支持换行符转换的编辑器把换行符设置为LF保存编码设置为UTF-8无BOM。另外确认文件名是ssh而不是ssh.txt。这同样是个容易出问题的细节。在某些版本的树莓派系统上SSH标志文件不叫ssh而叫ssh.txt也能生效但不能依赖这种不确定性。5.2 树莓派启动了但路由器看不到它这种情况下需要先确认树莓派真的启动了。如果SD卡旁边的绿灯在闪烁说明系统至少启动过程中读取了SD卡。如果绿灯完全不亮那就不是WiFi配置的问题而是系统根本没引导起来可以尝试重新烧录SD卡。确认树莓派启动了但还是不在路由器客户端列表里大概率是5GHz频段的问题。有些树莓派型号比如Zero 2W的WiFi模块对5GHz频段的支持不够完善或者你的路由器只开启了5GHz频段而树莓派默认配置使用的是2.4GHz。如果你给路由器设置了“双频合一”也有可能造成树莓派一直在2.4GHz和5GHz之间切换导致连接失败。排查思路是登录路由器后台看是否同时开启2.4GHz和5GHz两个频段如果你能临时关闭5GHz频段让树莓派只用2.4GHz连接成功后再恢复即可。另一个比较隐蔽的问题是WiFi密码中如果包含特殊字符比如引号、反斜杠、$符号在wpa_supplicant.conf里需要做转义或者加引号处理。举例来说如果密码是 123abc 配置里写成 psk123abc 才能被正确解析。这类问题通常不会立刻想到但如果你确认配置格式没错、频段也正常就要考虑是不是这个原因。5.3 SSH总是被拒权限、用户名、密钥问题SSH连接失败时错误提示分为几种典型情况。Permission denied, please try again. 说明你到了认证环节但用户名或密码不对。可能是之前配置的默认pi账号被禁用了树莓派新版系统默认用户改为了其他名称或者你已经通过userconf.txt设置过自定义账号。这种情况下可以在路由器后台查看树莓派的IP然后从同一路由器的另一个终端上尝试用其他用户名连接。Connection refused 则说明SSH端口被拒绝了树莓派上的SSH服务可能没有启动。原因有可能是boot分区下的ssh标志文件没生效或者系统版本在无头模式下要求必须先创建用户文件userconf.txt才能开启SSH。这种情况下可以检查一下boot分区是否同时存在 ssh 和 userconf.txt 两个文件。还有一种情况是IP地址不对。你可能在路由器后台看到多个设备凭主机名或者IP无法确定哪一台是树莓派。这时可以用 arp -a 命令查看局域网中所有设备对照MAC地址前几位来找。树莓派的有线网卡MAC通常以dc:a6:32或b8:27:eb开头无线网卡MAC通常以dc:e6:ce或e4:5f:01开头。不同型号和制造批次会有差异但通过MAC地址排除法通常能缩小范围。5.4 Windows下SSH权限报错的处理Windows下使用SSH有时会遇到 Bad owner or permissions on C:\Users\用户名.ssh\config 这个错误原因是OpenSSH要求.ssh目录和config文件的访问权限只能属于当前用户不能继承自其他用户或组。解决方法是右键config文件进入属性-安全-高级把所有者改成当前用户然后禁用权限继承把所有其他用户的权限条目全部移除只保留当前用户的完全控制权限。我遇到这个问题的场景是从别人那里拷贝了一份.ssh/config配置文件到新的Windows机器上导致文件的ACL权限带着旧机器的用户SID。这个问题在Windows的OpenSSH客户端上很常见因为Linux和macOS对文件权限的模型不同Windows需要额外注意。另外强调一点如果你不想手动修改文件权限也可以直接在PowerShell里执行 icacls 命令快速重置权限。命令是icacls C:\Users\你的用户名.ssh\config /inheritance:r /grant:r $($env:USERNAME):F这个命令的含义是删除所有继承权限只给当前用户授予完全控制。执行完以后再测试ssh连接通常就恢复正常了。6. 从WiFi配置延伸出去的几个实用技巧6.1 如何在已经能SSH登录后动态修改WiFi树莓派连上WiFi一切正常但如果换个环境比如把树莓派带到公司、校园或者另一个住处需要连接一个新的WiFi网络这时不需要再把SD卡拔出来手动改文件。只要你已经能SSH登录就可以通过命令动态修改WiFi配置。一条经典命令是sudo raspi-config这个命令会打开树莓派的系统配置界面里面有一项是System Options - Wireless LAN可以交互式地选择WiFi网络并输入密码。这对不熟悉命令行的人来说最友好因为它会把配置写入正确的文件位置并自动重新加载网络服务。如果你习惯用命令行也可以直接编辑 /etc/wpa_supplicant/wpa_supplicant.conf 文件把systemd的wpa_supplicant服务重启sudo nano /etc/wpa_supplicant/wpa_supplicant.conf sudo wpa_cli -i wlan0 reconfigure注意系统运行时编辑的wpa_supplicant.conf位于rootfs分区不是boot分区上的那份。boot分区上的wpa_supplicant.conf文件只在首次启动时会被拷贝到/etc/wpa_supplicant/目录后续如果两者不一致系统以/etc/wpa_supplicant/下的文件为准。这是个容易混淆的细节很多教程不会专门讲但在换WiFi场景下特别有用。6.2 无头模式下用SSH密钥替代密码登录每次SSH都输密码虽然不麻烦但如果你需要频繁登录、写定时任务脚本、或者做自动化部署用密钥认证会更省心。生成密钥对的过程很简单在你自己的电脑上执行ssh-keygen -t ed25519 -C your_emailexample.com它会生成一对密钥默认存放在~/.ssh/id_ed25519私钥和~/.ssh/id_ed25519.pub公钥。然后把公钥上传到树莓派ssh-copy-id pi192.168.1.100命令执行时会要求输入一次密码之后SSH就会自动用密钥认证不再询问密码。如果你手头没有ssh-copy-idWindows下通常没有可以手动把公钥追加到树莓派的~/.ssh/authorized_keys文件里。这一步也算是我最喜欢用的操作之一配置好之后不仅SSH不用输密码scp传输文件也更方便了。6.3 把无头树莓派当作小型开发服务器树莓派无头配置完成之后很多人就把它当成一个低功耗的开发服务器来用。我个人的一个常用玩法是配合VS Code远程开发插件。VS Code有一个Remote-SSH扩展配置好SSH目标之后能在本地VS Code界面直接编辑和运行树莓派上的代码这种感觉和在本地开发没什么区别而且项目的编译和测试都在树莓派本机执行。配置方法很简单安装Remote-SSH扩展后在命令面板选择Remote-SSH: Connect to Host输入 pi192.168.1.100 VS Code会帮你安装一个服务端组件到树莓派上后面打开什么文件夹就像在本地打开一样。如果配合上前面讲的SSH密钥认证整个过程甚至可以做到无感连接。这个方式对树莓派上做Python脚本、GPIO控制、小型Web服务部署都非常方便用过之后就再也回不到以前那种反复sftp上传文件的模式了。6.4 无头树莓派的进阶串口调试兜底方案纯靠WiFi和SSH操作树莓派有一个潜在的致命风险如果你把WiFi配置弄错了而树莓派又离路由器很远那么你可能会发现自己完全无法访问它。这时如果手头有一根USB转TTL串口线就能通过串口登录树莓派即使网络完全不通也能进系统排查。树莓派40pin排针上的串口引脚是GPIO14TXD和GPIO15RXD接上USB转TTL模块后在电脑上使用minicommacOS/Linux或PuTTYWindows连接串口波特率是115200。登录后可以检查WiFi状态、修改配置文件、重启网络服务不需要网络连接就能完成所有操作。串口调试是在无头配置遇到“死局”时的一个重要兜底方案。虽然你不是每次都需要它但它确实是一根“保险绳”。尤其是当你修改了防火墙规则、把网络配置搞坏、或者WiFi网卡被禁用了的这类场景画面彻底黑掉的情况下串口可能是你唯一的救星。我个人的建议是做树莓派项目可以备一根USB转TTL线放到工具箱里不贵但关键时候能救命。7. 总结与经验手记把整个无头配置流程走完你会发现它其实并不复杂核心就两个动作往SD卡boot分区放wpa_supplicant.conf文件配置WiFi放ssh标志文件开启SSH服务。但细节非常多每个环节的疏忽都可能导致整个流程失败。我个人在实际操作中的体会是不要一上来就追求最快完成而是一步一步确认每个前置条件。烧录完系统之后先花一分钟检查boot分区里的文件名、扩展名、文件内容编码再上电远远比上电之后反复排查要省时间。另外路由器后台查询IP的能力一定要掌握就算你更喜欢用mDNS或者手机App路由器后台总是一个最可靠的基础手段。最后再分享一个小技巧如果你发现自己经常要给不同树莓派做无头配置建议保存一份标准的wpa_supplicant.conf模板和一个空白的ssh标志文件放到电脑上一个固定目录里需要的时候直接拷贝进boot分区改一下SSID和密码就能用。这样每次配置的时间可以从10分钟压缩到2分钟。树莓派的乐趣就在于折腾但折腾之前把基础流程摸透后面做项目的时候就不会被连接问题反复折磨了。
返回列表