嵌入式设备传输方式:SCP、SSH文件传输实操 📅 2026/7/19 1:47:04 嵌入式设备传输方式SCP、SSH文件传输实操作者黒漂技术佬适合人群嵌入式开发新手已连通开发板网络关键词SSH、SCP、文件传输、开发板引言上一篇 HelloWorld 实战中我们提到了 SCP 传输但没有展开。实际开发中你编译的程序、配置文件、内核镜像需要频繁在PC和开发板之间来回传。U盘拷贝太慢串口传输也效率低下网络传输才是正道。这篇就带你把 SSH 和 SCP 用熟让文件传输变成一条命令的事。一、SSH服务基础1.1 什么是SSHSSHSecure Shell是一种加密网络传输协议用于在不安全的网络上安全地执行命令和传输文件。在嵌入式开发中SSH承担两个角色远程登录在PC上通过SSH连接开发板终端不需要串口线文件传输基于SSH的SCP/SFTP协议在PC和开发板间传输文件1.2 开发板端SSH服务配置大多数Linux开发板出厂时已预装SSH服务通常是dropbear或openssh-server。如果没有需要手动安装# Ubuntu/Debian系统开发板aptupdateaptinstallopenssh-server# 或轻量级SSH服务 dropbear适合资源受限的板子aptinstalldropbear1.3 启动和检查SSH服务# 启动SSH服务systemctl start sshd# 或servicesshstart# 设置开机自启systemctlenablesshd# 检查服务状态systemctl status sshd# 确认SSH端口默认22是否监听netstat-tlnp|grep221.4 开发板网络配置确保开发板和PC在同一局域网内能互相ping通# 开发板端查看IPifconfig# 或 ip addr# PC端ping开发板假设开发板IP为192.168.1.100ping192.168.1.100# 开发板端ping PC假设PC IP为192.168.1.50ping192.168.1.50如果ping不通依次检查1) IP是否同一网段 2) 防火墙是否放行 3) 网线/WiFi是否连接 4) 开发板网卡是否up状态。二、SSH远程登录2.1 基本登录# 从PC登录开发板sshroot192.168.1.100# 指定端口非默认22端口时ssh-p2222root192.168.1.100# 首次连接会提示确认指纹输入yes即可2.2 SSH免密登录配置每次输密码太麻烦用密钥对实现免密登录# PC端生成密钥对如果已有可跳过ssh-keygen-trsa-b2048# 一路回车即可默认生成在 ~/.ssh/id_rsa# 将公钥传到开发板ssh-copy-id root192.168.1.100# 之后登录不再需要密码sshroot192.168.1.1002.3 常用SSH参数参数作用示例-p指定端口ssh -p 2222 root192.168.1.100-i指定私钥文件ssh -i ~/.ssh/mykey root192.168.1.100-C压缩传输ssh -C root192.168.1.100-f后台执行配合端口转发使用-L本地端口转发ssh -L 8080:localhost:80 root192.168.1.100三、SCP文件传输3.1 SCP命令语法SCPSecure Copy Protocol基于SSH协议语法简单直观scp[参数]源文件 目标位置3.2 从PC传文件到开发板上传# 传输单个文件scphello_arm root192.168.1.100:/root/# 传输到指定目录并改名scphello_arm root192.168.1.100:/root/myapp# 传输多个文件scpfile1 file2 root192.168.1.100:/root/# 传输整个目录-r 递归scp-r~/embedded_projects/ root192.168.1.100:/root/projects/3.3 从开发板传文件到PC下载# 下载单个文件scproot192.168.1.100:/root/log.txt ./# 下载整个目录scp-rroot192.168.1.100:/root/logs/ ./3.4 常用SCP参数参数作用说明-r递归传输传目录时必须加-P指定端口注意是大写PSSH是-p小写-C压缩传输传大文件时节省带宽-v显示详细信息排查问题时用-p保留原文件属性保留时间戳和权限3.5 指定端口传输示例# 如果开发板SSH端口为2222scp-P2222hello_arm root192.168.1.100:/root/四、文件传输实战4.1 实战场景传输编译好的程序# PC端编译程序arm-linux-gnueabihf-gcc hello.c-ohello_arm# 传输到开发板scphello_arm root192.168.1.100:/root/# SSH登录开发板sshroot192.168.1.100# 开发板端赋权并运行chmodx /root/hello_arm /root/hello_arm4.2 实战场景批量传输项目文件# PC端打包后传输更高效cd~/embedded_projects/tarczf myproject.tar.gz hello/# 传输压缩包scpmyproject.tar.gz root192.168.1.100:/root/# 开发板端解压sshroot192.168.1.100cd /root tar xzf myproject.tar.gz4.3 实战场景从开发板拉取日志# 开发板上的运行日志拉到PC分析scp-Croot192.168.1.100:/var/log/messages ./# 拉取dmesg内核日志sshroot192.168.1.100dmesgdmesg_board.log五、SFTP文件管理SCP够用了但如果你需要更灵活的文件管理浏览目录、断点续传可以用SFTP# 连接到开发板sftproot192.168.1.100# 进入交互模式后可用命令sftpls# 列出远程文件sftpcd/root# 切换远程目录sftplcd ~/Desktop# 切换本地目录sftpput hello_arm# 上传文件sftpget log.txt# 下载文件sftpquit# 退出SFTP vs SCP对比对比项SCPSFTP传输方式一次性传输交互式会话断点续传不支持支持目录浏览不支持支持操作复杂度简单稍复杂适用场景传单个文件/目录需要浏览和管理文件六、常见问题排查6.1 Connection refused# 报错ssh: connect to host 192.168.1.100 port 22: Connection refused# 原因开发板SSH服务未启动# 解决在开发板上启动SSHsystemctl start sshd6.2 Connection timed out# 报错Connection timed out# 原因网络不通或IP错误# 排查ping192.168.1.100# 先确认网络连通# 检查IP是否正确ifconfig6.3 Permission denied密码# 报错Permission denied, please try again.# 原因1密码错误# 原因2SSH配置禁止root登录# 解决修改/etc/ssh/sshd_configvim/etc/ssh/sshd_config# 修改 PermitRootLogin yessystemctl restart sshd问题速查表报错原因解决方案Connection refusedSSH服务未启动systemctl start sshdConnection timed out网络不通检查IP、网线、防火墙Permission denied密码错误或禁止root修改sshd_configHost key verification之前连接的IP被重用删除~/.ssh/known_hosts对应行总结SSH和SCP是嵌入式开发中最高频使用的网络工具。SSH解决远程登录问题SCP解决文件传输问题两者都基于加密协议安全可靠。掌握上传、下载、目录递归传输、指定端口这几个常用操作日常开发就足够了。传输大文件时加-C压缩能提速需要交互式文件管理时切到SFTP。遇到连接问题记住排查三步走先ping确认网络、再检查SSH服务状态、最后看配置文件。下一篇介绍NFS共享目录那才是实现PC上编译、开发板上直接运行的终极方案。