1. 背景
多设备协同工作中,因操作系统的不同,我们经常需要将另外一个系统中的文件传输到本地PC进行浏览、编译。多设备文件互传,在嵌入式开发中也经常会遇到,本篇介绍命令行下文件传输的方式。
2. 传输方式
服务器与本地PC之间互传文件,有多种方式,常见的有使用tftpd小工具,mobaxterm ide自带的"upload"和“download"按钮,securt crt安装的时候提供的secure fx工具。但是很多时候,一些环境不允许安装这些第三方软件,这时候就只能使用最原始的命令行进行交互了。
2.1 SCP 协议传输
SCP(Secure Copy Protocol):基于SSH协议的安全文件复制工具,用于在本地主机和远程主机之间或两台远程主机之间安全地复制文件。
指令格式
scp [选项] [源文件/目录] [目标路径]
- 源文件/目录:可以是本地路径或远程路径。
- 目标路径:可以是本地路径或远程路径。
upload 文件到服务器
- 单文件传输
SCP F:/学习/cjson/cJSON/README.md root@服务器IP地址:/root/project/001_json_c_learn/
- 整个目录传输
scp -r F:/学习/cjson/cJSON/ root@IP地址:/root/project/002_test
download文件到本地
- 单文件传输
scp root@IP地址:/root/project/001_json_c_learn/README.md F:/学习/cjson/cJSON/
- 整个目录传输
scp -r root@IP地址:/root/project/001_json_c_learn/ F:/学习/cjson/cJSON/
2.2 SFTP 协议传输
SFTP(SSH File Transfer Protocol):基于SSH的安全文件传输协议,提供加密的数据传输和身份验证,确保文件传输过程的安全性。
指令连接
# 默认端口连接 sftp username@host_ip
username
:远程服务器用户名。host_ip
:服务器IP地址或域名。- 示例:
sftp root@192.168.1.100
。
# 指定端口连接 sftp -P port_number username@host_ip
-P
:指定SSH端口(非默认22)。- 示例:
sftp -P 48101 root@192.168.1.100
。
# 密钥认证连接 sftp -i /path/to/private_key username@host_ip
-i
:指定私钥文件路径(需提前生成密钥对并将公钥配置服务器)。- 示例:
sftp -i ~/.ssh/id_rsa user@192.168.1.100
。
上传文件到服务器(put)
指令格式
put local_file_path [remote_file_path]
将本地文件上传到远程服务器。
- 若未指定
remote_file_path
,默认上传到当前远程目录(可以使用pwd
查看默认远程目录)。
下载文件到本地 (get)
指令格式
get remote_file_path [local_file_path]
将远程文件下载到本地。
若未指定
local_file_path
,默认下载到当前本地目录。
递归传输目录
上传目录(递归)
put -r local_directory_path [remote_directory_path]
- 递归上传整个目录及其子文件。
- 示例:
put -r /home/user/projects /var/www/
下载目录(递归)
get -r remote_directory_path [local_directory_path]
- 递归下载整个目录及其子文件。
- 示例:
get -r /var/log /backup/logs/
批量传输
mput *.txt # 上传当前目录所有.txt文件 mget *.log # 下载远程目录所有.log文件
目录与文件管理
- 切换远程目录:
cd remote_directory
- 切换本地目录:
lcd local_directory
- 查看远程目录:
ls
- 查看本地目录:
lls
- 删除远程文件:
rm remote_file
- 重命名远程文件:
rename old_name new_name
- 退出SFTP:
exit
或quit
` - 查看远程目录:
ls
- 查看本地目录:
lls
- 删除远程文件:
rm remote_file
- 重命名远程文件:
rename old_name new_name
- 退出SFTP:
exit
或quit
- 查看帮助:
help
或?
- 切换远程目录:
3. 注意
sftp 连接远程时需要输入密码,微避免每次输入密码,可以在本地生成 rsa 秘钥,然后将公钥上传到服务器下的
authorized_keys
中。 可以参考 ssh连接云服务器记录 中 2.3小节,使用ssh-cpoy-id指令进行。