系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

scp

通过 SSH 在 Windows 与远程主机之间复制文件。

补充说明

scp 是 OpenSSH 客户端的一部分,Windows 10 1809+ 和 Windows 11 通过“可选功能 → OpenSSH Client”提供,通常和 ssh.exe 一起安装。它复用 SSH 的认证、主机指纹和 %USERPROFILE%\.ssh\config,语法是 scp [选项] 源 目标,远程端写成 user@host:路径。

边界:scp 适合一次性传输,不适合大量小文件或需要断点续传的场景;它不保留 NTFS ACL,-p 只保留时间和权限位。较新的 OpenSSH(9.0 起)默认改用 SFTP 协议传输,旧服务器没有 SFTP 子系统时会失败,可加 -O 回退到传统 SCP 协议。需要同步目录用 rsync(可在 WSL 中用),需要交互式浏览用 sftp。

Windows 路径要特别小心:scp 用冒号分隔主机和路径,C:\temp 容易被误解析;本地和远端 Windows 路径优先写正斜杠并加引号,例如 C:/temp/。端口参数是大写 -P,小写 -p 表示保留文件属性,别写反。

常用示例

# 1. 上传本地文件到 Linux 主机的家目录
C:\> scp C:\temp\app.zip user@example.com:/home/user/

# 2. 从远程主机下载日志到本地目录
C:\> scp user@example.com:/var/log/app.log C:\temp\

# 3. 递归复制整个目录,目标目录不存在时会创建
C:\> scp -r C:\temp\site user@example.com:/var/www/site

# 4. 指定非 22 端口和私钥;注意端口用大写 -P
C:\> scp -P 2222 -i C:\Users\me\.ssh\id_ed25519 file.txt user@example.com:/tmp/

# 5. 旧服务器没有 SFTP 子系统时,回退到传统 SCP 协议
C:\> scp -O old-server:/data/file.tar C:\temp\

# 6. 压缩传输并保留时间戳,适合文本日志
C:\> scp -C -p app.log user@example.com:/backup/

# 7. 远端是 Windows OpenSSH Server 时,路径也建议用正斜杠
C:\> scp report.csv user@winhost:C:/Users/alice/Desktop/

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. scp 的 -P 和 -p 分别是什么意思?写反会怎样?
  2. 为什么新版客户端连旧服务器可能失败?-O 解决什么问题?
  3. 为什么 Windows 路径建议写 C:/temp/ 而不是 C:\temp?
答案
  1. -P 指定 SSH 端口,-p 保留时间/权限;写反会报未知选项或达不到预期效果。
  2. 新版 OpenSSH 默认用 SFTP 传输,旧服务器可能没有 SFTP 子系统;-O 回退到传统 SCP 协议。
  3. scp 用冒号分隔主机和路径,反斜杠还可能被转义;正斜杠加引号可避免被误判为远程主机。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令