嵌入式设备传输方式:SCP、SSH文件传输实操
2026/7/19 1:47:03 网站建设 项目流程

嵌入式设备传输方式:SCP、SSH文件传输实操

作者:黒漂技术佬
适合人群:嵌入式开发新手,已连通开发板网络
关键词:SSH、SCP、文件传输、开发板

引言

上一篇 HelloWorld 实战中,我们提到了 SCP 传输但没有展开。实际开发中,你编译的程序、配置文件、内核镜像需要频繁在PC和开发板之间来回传。U盘拷贝太慢,串口传输也效率低下,网络传输才是正道。这篇就带你把 SSH 和 SCP 用熟,让文件传输变成一条命令的事。

一、SSH服务基础

1.1 什么是SSH

SSH(Secure Shell)是一种加密网络传输协议,用于在不安全的网络上安全地执行命令和传输文件。在嵌入式开发中,SSH承担两个角色:

  • 远程登录:在PC上通过SSH连接开发板终端,不需要串口线
  • 文件传输:基于SSH的SCP/SFTP协议,在PC和开发板间传输文件

1.2 开发板端SSH服务配置

大多数Linux开发板出厂时已预装SSH服务(通常是dropbearopenssh-server)。如果没有,需要手动安装:

# Ubuntu/Debian系统开发板aptupdateaptinstallopenssh-server# 或轻量级SSH服务 dropbear(适合资源受限的板子)aptinstalldropbear

1.3 启动和检查SSH服务

# 启动SSH服务systemctl start sshd# 或servicesshstart# 设置开机自启systemctlenablesshd# 检查服务状态systemctl status sshd# 确认SSH端口(默认22)是否监听netstat-tlnp|grep22

1.4 开发板网络配置

确保开发板和PC在同一局域网内,能互相ping通:

# 开发板端查看IPifconfig# 或 ip addr# PC端ping开发板(假设开发板IP为192.168.1.100)ping192.168.1.100# 开发板端ping PC(假设PC IP为192.168.1.50)ping192.168.1.50

如果ping不通,依次检查:1) IP是否同一网段 2) 防火墙是否放行 3) 网线/WiFi是否连接 4) 开发板网卡是否up状态。

二、SSH远程登录

2.1 基本登录

# 从PC登录开发板sshroot@192.168.1.100# 指定端口(非默认22端口时)ssh-p2222root@192.168.1.100# 首次连接会提示确认指纹,输入yes即可

2.2 SSH免密登录配置

每次输密码太麻烦,用密钥对实现免密登录:

# PC端生成密钥对(如果已有可跳过)ssh-keygen-trsa-b2048# 一路回车即可,默认生成在 ~/.ssh/id_rsa# 将公钥传到开发板ssh-copy-id root@192.168.1.100# 之后登录不再需要密码sshroot@192.168.1.100

2.3 常用SSH参数

参数作用示例
-p指定端口ssh -p 2222 root@192.168.1.100
-i指定私钥文件ssh -i ~/.ssh/mykey root@192.168.1.100
-C压缩传输ssh -C root@192.168.1.100
-f后台执行配合端口转发使用
-L本地端口转发ssh -L 8080:localhost:80 root@192.168.1.100

三、SCP文件传输

3.1 SCP命令语法

SCP(Secure Copy Protocol)基于SSH协议,语法简单直观:

scp[参数]源文件 目标位置

3.2 从PC传文件到开发板(上传)

# 传输单个文件scphello_arm root@192.168.1.100:/root/# 传输到指定目录并改名scphello_arm root@192.168.1.100:/root/myapp# 传输多个文件scpfile1 file2 root@192.168.1.100:/root/# 传输整个目录(-r 递归)scp-r~/embedded_projects/ root@192.168.1.100:/root/projects/

3.3 从开发板传文件到PC(下载)

# 下载单个文件scproot@192.168.1.100:/root/log.txt ./# 下载整个目录scp-rroot@192.168.1.100:/root/logs/ ./

3.4 常用SCP参数

参数作用说明
-r递归传输传目录时必须加
-P指定端口注意是大写P(SSH是-p小写)
-C压缩传输传大文件时节省带宽
-v显示详细信息排查问题时用
-p保留原文件属性保留时间戳和权限

3.5 指定端口传输示例

# 如果开发板SSH端口为2222scp-P2222hello_arm root@192.168.1.100:/root/

四、文件传输实战

4.1 实战场景:传输编译好的程序

# PC端:编译程序arm-linux-gnueabihf-gcc hello.c-ohello_arm# 传输到开发板scphello_arm root@192.168.1.100:/root/# SSH登录开发板sshroot@192.168.1.100# 开发板端:赋权并运行chmod+x /root/hello_arm /root/hello_arm

4.2 实战场景:批量传输项目文件

# PC端:打包后传输更高效cd~/embedded_projects/tarczf myproject.tar.gz hello/# 传输压缩包scpmyproject.tar.gz root@192.168.1.100:/root/# 开发板端解压sshroot@192.168.1.100"cd /root && tar xzf myproject.tar.gz"

4.3 实战场景:从开发板拉取日志

# 开发板上的运行日志拉到PC分析scp-Croot@192.168.1.100:/var/log/messages ./# 拉取dmesg内核日志sshroot@192.168.1.100"dmesg">dmesg_board.log

五、SFTP文件管理

SCP够用了,但如果你需要更灵活的文件管理(浏览目录、断点续传),可以用SFTP:

# 连接到开发板sftproot@192.168.1.100# 进入交互模式后可用命令:sftp>ls# 列出远程文件sftp>cd/root# 切换远程目录sftp>lcd ~/Desktop# 切换本地目录sftp>put hello_arm# 上传文件sftp>get log.txt# 下载文件sftp>quit# 退出

SFTP vs SCP对比

对比项SCPSFTP
传输方式一次性传输交互式会话
断点续传不支持支持
目录浏览不支持支持
操作复杂度简单稍复杂
适用场景传单个文件/目录需要浏览和管理文件

六、常见问题排查

6.1 Connection refused

# 报错:ssh: connect to host 192.168.1.100 port 22: Connection refused# 原因:开发板SSH服务未启动# 解决:在开发板上启动SSHsystemctl start sshd

6.2 Connection timed out

# 报错:Connection timed out# 原因:网络不通或IP错误# 排查:ping192.168.1.100# 先确认网络连通# 检查IP是否正确ifconfig

6.3 Permission denied(密码)

# 报错:Permission denied, please try again.# 原因1:密码错误# 原因2:SSH配置禁止root登录# 解决:修改/etc/ssh/sshd_configvim/etc/ssh/sshd_config# 修改 PermitRootLogin yessystemctl restart sshd

问题速查表

报错原因解决方案
Connection refusedSSH服务未启动systemctl start sshd
Connection timed out网络不通检查IP、网线、防火墙
Permission denied密码错误或禁止root修改sshd_config
Host key verification之前连接的IP被重用删除~/.ssh/known_hosts对应行

总结

SSH和SCP是嵌入式开发中最高频使用的网络工具。SSH解决远程登录问题,SCP解决文件传输问题,两者都基于加密协议,安全可靠。掌握上传、下载、目录递归传输、指定端口这几个常用操作,日常开发就足够了。传输大文件时加-C压缩能提速,需要交互式文件管理时切到SFTP。遇到连接问题记住排查三步走:先ping确认网络、再检查SSH服务状态、最后看配置文件。下一篇介绍NFS共享目录,那才是实现"PC上编译、开发板上直接运行"的终极方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询