
scp(Secure Copy)是基于SSH协议的安全文件传输命令,它在网络中的不同主机之间加密传输文件或目录。作为Linux/Unix系统中常用的远程文件传输工具,scp继承了SSH的安全特性,所有数据在传输过程中都经过加密,有效防止了中间人攻击和信息窃听。
与传统的FTP相比,scp无需额外配置FTP服务端,只要目标主机开启SSH服务即可使用。它语法简洁、功能强大,特别适合系统管理员进行远程备份、文件分发、应用部署等场景。虽然近年来rsync在增量传输方面更受青睐,但scp凭借其简单直接的特性,仍然是日常工作中不可或缺的命令行工具。
1. 基本语法
| 命令 | 说明 |
|---|
scp 源路径 目标路径 | |
scp file.txt user@host:/path/ | |
scp user@host:/path/file.txt . | |
scp user@host:/path/file.txt /local/path/ | |
2. 上传文件
| 命令 | 说明 |
|---|
scp file.txt user@host:/tmp/ | |
scp file1 file2 user@host:/tmp/ | |
scp *.log user@host:/var/log/archive/ | |
scp -p file.txt user@host:/tmp/ | |
3. 下载文件
| 命令 | 说明 |
|---|
scp user@host:/tmp/file.txt . | |
scp user@host:/tmp/file.txt ~/Downloads/ | |
scp user@host:'/var/log/*.log' . | |
scp user@host:/tmp/file.txt ./new-name.txt | |
4. 复制目录
| 命令 | 说明 |
|---|
scp -r dir/ user@host:/tmp/ | |
scp -r user@host:/var/www/ ./backup/ | |
scp -r dir1 dir2 user@host:/tmp/ | |
scp -rp project/ user@host:/srv/ | |
5. 端口、密钥和身份验证
| 命令 | 说明 |
|---|
scp -P 2222 file.txt user@host:/tmp/ | |
scp -i ~/.ssh/id_ed25519 file.txt user@host:/tmp/ | |
scp -o IdentityFile=~/.ssh/id_ed25519 file.txt user@host:/tmp/ | |
scp -o StrictHostKeyChecking=yes file.txt user@host:/tmp/ | |
6. 性能和可靠性
| 命令 | 说明 |
|---|
scp -C large-file.iso user@host:/tmp/ | |
scp -l 8000 file.txt user@host:/tmp/ | |
scp -v file.txt user@host:/tmp/ | |
scp -q file.txt user@host:/tmp/ | |
scp -o ConnectTimeout=10 file.txt user@host:/tmp/ | |
7. 远程到远程复制
| 命令 | 说明 |
|---|
scp user1@host1:/path/file user2@host2:/path/ | |
scp -3 user1@host1:/path/file user2@host2:/path/ | |
scp -P 2222 user1@host1:/path/file user2@host2:/path/ | |
8. 常用组合
| 命令 | 说明 |
|---|
scp -r ./site user@host:/var/www/ | |
scp -i ~/.ssh/id_ed25519 -P 2222 backup.sql user@host:/tmp/ | |
scp user@host:/etc/nginx/nginx.conf ./ | |
scp -rp ./configs user@host:/etc/myapp/ | |
9. 故障排查指南
| 问题 | 解决方法 |
|---|
| Permission denied | |
| Host key verification failed | ssh-keygen -R hostname |
| 自定义端口连接拒绝 | |
| 传输卡住或超时 | scp -o ConnectTimeout=10 -o ServerAliveInterval=15 file user@host:/path/ |
| "Not a regular file"错误 | |
| OpenSSH 9.0+协议错误 | scp -O file user@host:/path/ |
| 调试连接问题 | scp -v file user@host:/path/ |
温馨提示: scp命令虽然简单易用,但在传输大量小文件或需要增量备份的场景下,建议考虑使用rsync命令,它支持断点续传和增量同步,效率更高。此外,使用密钥认证可以避免每次输入密码,提高自动化脚本的可靠性。
关注公众号(haopython),请回复: LLT003