SCP(安全复制协议)
原理:基于SSH加密传输,适合中小文件。
命令格式:
scp [选项] 用户名@远程IP:远程文件路径 本地保存路径
示例:
-
复制单个文件(远程22端口,用户名为
user
)scp -P 2222 user@192.168.1.100:/home/user/data.txt /local/dir/
-P 2222
:指定SSH端口(默认22可省略)/local/dir/
:本地目录需提前创建 -
递归复制目录
scp -r user@192.168.1.100:/remote/dir /local/path
注意事项:
- 使用SSH密钥认证更安全(通过
ssh-keygen
生成密钥对) - 传输大文件时可能较慢(无增量同步功能)
Rsync(增量同步工具)
原理:仅传输差异部分,适合大文件或定期备份。
命令格式:
rsync [选项] 用户名@远程IP:源路径 本地路径
示例:
rsync -avz -e "ssh -p 2222" user@192.168.1.100:/home/user/project/ /backup/
-a
:归档模式(保留权限、时间戳)-v
:显示详细过程-z
:压缩传输-e
:指定SSH端口
优势:
- 支持断点续传(
--partial
选项) - 可排除文件(
--exclude='*.log'
)
SFTP(交互式安全传输)
原理:通过SSH建立FTP-like会话,适合手动操作。
操作步骤:
- 连接远程服务器:
sftp -P 2222 user@192.168.1.100
- 下载文件:
sftp> get /remote/file.txt /local/path/
- 下载目录(需先打包):
sftp> get -r /remote/dir # 部分SFTP客户端支持递归
HTTP/FTP下载(公开文件)
适用场景:远程文件已通过Web/FTP服务公开。
工具命令:
# 使用curl curl -o /local/data.tar.gz ftp://user:pass@192.168.1.100/data.tar.gz
注意:
- FTP密码在命令中明文存储不安全,建议改用SCP/rsync
- 支持断点续传(
wget -c
或curl -C -
)
SSH + Tar(高效传输目录)
原理:在SSH管道中打包传输,避免逐个文件处理。
操作命令:
ssh -p 2222 user@192.168.1.100 "tar czf - /remote/dir" | tar xzvf - -C /local/path
tar czf -
:远程打包并输出到标准流tar xzvf -
:本地解压标准流输入-C
:指定解压目录
优势:
- 处理大量小文件时速度显著提升
- 自动保留文件属性
方法对比与选择建议
方法 | 适用场景 | 安全性 | 效率 |
---|---|---|---|
SCP | 单文件/小目录快速传输 | 高 | 中等 |
Rsync | 大文件/定期备份/增量同步 | 高 | 高 |
SFTP | 交互式查看并下载 | 高 | 低 |
HTTP/FTP | 公开文件直链下载 | 中低 | 高 |
SSH+Tar | 超大型目录(如日志文件) | 高 | 最高 |
安全实践指南
- 密钥认证:
生成SSH密钥对替代密码登录:ssh-keygen -t ed25519 # 生成密钥 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.100 # 部署公钥
- 防火墙配置:
- 限制SSH端口访问IP白名单
- 使用非标准端口(如2222)减少扫描攻击
- 传输加密:
避免使用FTP等明文协议,优先选择SCP/rsync over SSH。
常见问题排查
- 权限拒绝:
检查远程文件读权限(ls -l
)及本地目录写权限。 - 连接超时:
验证网络连通性(ping 192.168.1.100
)和防火墙规则。 - 磁盘空间不足:
使用df -h
检查本地存储空间。
引用说明:本文参考Linux man手册(
man scp
/man rsync
)、OpenSSH官方文档及IBM安全传输指南,实践命令已在Ubuntu 22.04/CentOS 7环境中验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6656.html