通过 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/
-P 和 -p 含义完全不同:大写指定 SSH 端口,小写保留时间/权限;写错会报未知选项或出现意外行为。先用 ssh -p 端口 user@host 验证端口和认证。scp: subsystem request failed 或远端提示找不到 sftp-server,说明服务器没启用 SFTP 子系统;加 -O 用传统 SCP,或在服务器启用 SFTP。C:\temp 这类路径可能被冒号误判为远程主机;改用 C:/temp/ 并加引号。远端 Windows 路径同样写 C:/Users/...,不要写反斜杠。StrictHostKeyChecking=no 跳过校验,预置 known_hosts 或先手工连接一次。scp 不能续传,大文件会从头开始;用 sftp 的 reget/ reput 或 WSL 里的 rsync 处理大文件和不稳定链路。scp 带到 Linux,-p 也不能让 Linux 权限自动符合 Web 目录要求;传完后在服务器上修正属主和权限。user@host:"/path/with spaces/file";本地路径也加引号,避免 CMD 拆分参数。scp -r 很慢,每个文件都有协议开销;先打包再用 tar 通过 ssh 传输,或改用 rsync。合上页面,先回答,再展开对照。
scp 的 -P 和 -p 分别是什么意思?写反会怎样?-O 解决什么问题?C:/temp/ 而不是 C:\temp?-P 指定 SSH 端口,-p 保留时间/权限;写反会报未知选项或达不到预期效果。-O 回退到传统 SCP 协议。scp 用冒号分隔主机和路径,反斜杠还可能被转义;正斜杠加引号可避免被误判为远程主机。
小程序版
微信扫码,随时查命令