在 Windows 上给服务器传个 200M 的日志包,很多人第一反应是装 WinSCP 或者 Xftp。其实 Win10 1809 之后自带 OpenSSH 客户端,PowerShell 里直接敲 scp 就能传。
先确认有没有装。设置里搜可选功能,看列表里有没有 OpenSSH 客户端;或者在终端执行 ssh -V,能出版本号就说明已经有了。
两条最常用的命令
上传一个文件到服务器:
scp -P 2222 backup.zip root@10.0.0.5:/data/把服务器上的目录整个拉下来:
scp -r root@10.0.0.5:/data/logs ./logs端口参数是大写 P,ssh 命令才是小写 p,这个细节坑过不少人。指定私钥用 -i,路径里有空格就用引号包起来。
几个高频报错
Permission denied 有两种。一种是密码错了,另一种是目标目录没写权限。先看路径对不对,服务端的 /data 归 root 还是 www,权限不对就换目录或者改属主。
另一种是 REMOTE HOST IDENTIFICATION HAS CHANGED。服务器重装过,主机密钥变了。确认没问题后,去用户目录下的 .ssh/known_hosts 里删掉旧记录,再连一次。
大文件和断点续传
scp 不支持断点续传,传到一半断网只能重来。超过几个 G 的文件,改用 rsync,加上 partial 和 progress 两个参数,断了再跑会接着传。Windows 上可以走 WSL,也可以直接用 cwRsync。
还有中文文件名。老版本 scp 在 GBK 和 UTF-8 之间会乱码,表现是传过去文件名变成问号。临时办法是先改英文名,传完再在服务器上改回来。