SFTP 跨服务器复制实践
概述
SFTP(SSH File Transfer Protocol)不仅支持本地与远程服务器之间的文件传输,还支持跨服务器的文件操作。本文将详细介绍如何使用 SFTP 进行跨服务器文件复制,包括多种实用方法和场景。
方法一:SFTP 批量命令
基础语法
sftp [user@]hostname
mput local-file remote-dir
get remote-file local-dir
lcd local-directory
cd remote-directory
示例:从服务器 A 复制到服务器 B
# 首先连接到源服务器
sftp user@server-a.example.com
# 切换到远程目录
cd /remote/source/dir
# 使用 mget 下载文件到本地临时目录
mget *.txt
# 断开连接并连接到目标服务器
exit
sftp user@server-b.example.com
# 上传文件到目标服务器
cd /remote/dest/dir
mput *.txt
exit
方法二:使用 sftp 循环脚本
对于需要频繁跨服务器同步的场景,可以编写自动化脚本:
#!/bin/bash
# 定义源服务器信息
SRC_HOST="source-server.example.com"
SRC_USER="admin"
SRC_DIR="/data/source"
# 定义目标服务器信息
DST_HOST="dest-server.example.com"
DST_USER="admin"
DST_DIR="/data/backup"
# 创建临时目录
TMP_DIR=$(mktemp -d)
# 从源服务器拉取文件
ssh $SRC_USER@$SRC_HOST "cd $SRC_DIR && tar czf - ." | tar xzf - -C $TMP_DIR
# 将文件推送到目标服务器
tar czf - -C $TMP_DIR . | ssh $DST_USER@$DST_HOST "tar xzf - -C $DST_DIR"
# 清理临时目录
rm -rf $TMP_DIR
方法三:SFTP 多会话并行传输
使用多个 SFTP 会话可以实现并行传输,提高效率:
# 同时启动多个 sftp 连接
(sftp -o BatchMode=yes user@server1.example.com <<EOF
lcd /local/source
mput files/*.zip
EOF
) &
(sftp -o BatchMode=yes user@server2.example.com <<EOF
lcd /local/source
mput files/*.zip
EOF
) &
# 等待所有后台任务完成
wait
方法四:使用 rsync + SFTP
结合 rsync 和 SFTP 可以实现增量同步和断点续传:
rsync -avz --progress \
-e 'ssh -i ~/.ssh/id_rsa' \
/local/source/ \
user@server.example.com:/remote/dest/
方法五:使用 Netcatty 图形化工具
Netcatty 是一款现代化的跨平台 SSH 客户端,内置 SFTP 工作流支持:
步骤
打开 Netcatty,创建两个标签页分别连接到源服务器和目标服务器。
左侧面板显示 SFTP 窗口,选择源服务器路径。
右侧面板显示目标服务器路径。
拖拽文件或右键菜单选择"复制到..."即可完成跨服务器传输。
Netcatty SFTP 优势
可视化操作:直观的文件浏览界面
断点续传:大文件传输失败可继续
多线程并发:提升传输速度
内置编辑:无需额外工具修改配置文件
常用命令参考
安全建议
使用密钥认证:避免密码暴露
ssh-keygen -t ed25519 -C "your_email@example.com" ssh-copy-id user@server.example.com限制访问范围:配置 SSH 允许仅特定 IP
定期轮换密钥:增强安全性
监控传输日志:记录所有跨服务器操作
常见问题排查
问题 1:权限拒绝 (Permission denied)
解决方案:
# 检查文件权限
ls -la /remote/path/
# 修复权限
sudo chmod 755 /remote/path/
sudo chown user:group /remote/path/问题 2:连接超时
解决方案:
# 增加超时时间
sftp -o ConnectTimeout=60 user@server.example.com
# 使用 KeepAlive 保持连接
echo "ServerAliveInterval 60" >> ~/.ssh/config问题 3:磁盘空间不足
解决方案:
# 检查可用空间
df -h /remote/path/
# 清理不必要文件
find /remote/path/ -name "*.tmp" -delete总结
SFTP 跨服务器复制是系统管理员和 DevOps 工程师的日常需求。根据实际场景选择合适的方法:
少量文件:使用 SFTP 批量命令
频繁同步:编写自动化脚本
大量数据:使用 rsync + SFTP
日常运维:利用 Netcatty 图形化工作流
掌握这些技巧后,你将能高效、安全地完成各种跨服务器文件传输任务。
本文发布于 Halo 博客,分类:SSH Terminal,标签:sftp、跨服务器、运维
评论区