scp
通过 SSH 协议在本地和远程主机之间安全复制文件和目录
语法
scp [options] source... target
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
-r |
递归复制整个目录 | scp -r ./dist user@host:/var/www/ |
常用 |
-P |
指定远程主机端口(注意是大写 P) | scp -P 2222 file.txt user@host:/tmp/ |
常用 |
-i |
指定私钥文件 | scp -i ~/.ssh/key file.txt user@host:/tmp/ |
常用 |
-C |
启用压缩传输 | scp -C largefile.tar user@host:/backup/ |
进阶 |
-q |
静默模式,不显示进度 | scp -q file.txt user@host:/tmp/ |
进阶 |
示例
上传文件到远程
scp ./app.jar deploy@server:/opt/app/
将本地文件复制到远程服务器
从远程下载文件
scp user@host:/var/log/app.log ./logs/
将远程文件下载到本地
递归上传目录
scp -r ./build/ user@host:/var/www/html/
上传整个目录及其内容
在两台远程主机间复制
scp user1@host1:/data/file.txt user2@host2:/backup/
通过本地中转在两台远程服务器间复制
常见错误
scp: /path/to/file: Permission denied
远程目标目录没有写权限,用 ssh 登录后 chmod 或换一个有权限的目录
scp: not a regular file
尝试复制目录但没加 -r 参数,加上 -r 递归复制
技巧
- scp 的端口参数是大写 -P,不是小写 -p(与 ssh 不同)
- 大量小文件传输建议先打包再传:tar czf - dir | ssh user@host 'tar xzf - -C /dest'
- OpenSSH 9.0 起 scp 默认使用 SFTP 协议,推荐直接用 rsync 或 sftp 替代