scp 与 sftp 传输文件
Windows 10 与 Server 2019 以后自带 OpenSSH 客户端,scp 和 sftp 可以直接使用:scp 适合一次性复制文件或目录,sftp 是交互式会话,脚本里则用 sftp -b 批处理模式。相比 SMB,SSH 通道更容易跨平台、跨网络边界使用,也不受域信任关系影响,是异构环境里传文件的中立选择。
基本信息
| 适用平台 | Windows 10 / Server 2019 及以上,自带 OpenSSH 客户端 |
|---|---|
| 复制文件 | scp .\本地文件 user@主机:C:/目标路径 |
| 递归复制 | scp -r 目录 user@主机:C:/目标 |
| 指定端口 | scp -P 2222(大写 P) |
| 批量模式 | sftp -b 批处理文件 user@主机 |
典型使用场景
- 在 Windows 与 Linux 之间传文件,不用配置共享或挂载
- 脚本化部署:把构建产物推送到目标主机的指定目录
- 通过非标准 SSH 端口访问跳板机或受限主机
- 传输敏感文件时走加密通道,而不是明文 FTP
- 用 sftp 批处理在自动化流程中上传或下载多个文件
- 跨网络边界分发配置或采集日志,不需要打通域信任关系
- 配合密钥认证做免交互传输,供流水线或计划任务调用
常用示例
常用示例
scp .\report.zip ops@web01:C:/temp/report.zip # 上传单个文件
scp -r .\config ops@web01:C:/temp/config # 递归上传目录
scp -P 2222 .\app.tar.gz ops@web01:C:/temp/ # 指定非默认端口
sftp ops@web01 # 交互式:get 下载、put 上传
# 批处理模式(自动化脚本用):
# sftp -b upload.txt ops@web01 其中 upload.txt 内写 put 与 get 指令操作对照
| 操作 | 命令 | 注意 |
|---|---|---|
| 上传文件 | scp 本地 主机:远端 | 远端路径用正斜杠 |
| 下载文件 | scp 主机:远端 本地 | 路径两端语义不同 |
| 递归目录 | scp -r | 大量小文件效率低 |
| 指定端口 | -P 端口 | 大写 P,小写语义不同 |
| 批量传输 | sftp -b 文件 | 适合自动化脚本 |
远端 Windows 路径写成 C:/temp 这样的正斜杠形式,写成反斜杠容易被当成远端相对路径,文件会落到非预期位置。
scp 不做增量同步也不支持断点续传,大量小文件或大文件建议先打包,或者改用 robocopy 走 SMB 通道更合适。首次连接会提示确认主机指纹,自动化脚本里要预先分发 known_hosts 或明确接受策略。