侧边栏壁纸
博主头像
Setyg的博客

当秋风染红落叶的时候,就是新生~

  • 累计撰写 86 篇文章
  • 累计创建 66 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SFTP 跨服务器复制实践

Setyg
2026-10-04 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

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 工作流支持:

步骤

  1. 打开 Netcatty,创建两个标签页分别连接到源服务器和目标服务器。

  2. 左侧面板显示 SFTP 窗口,选择源服务器路径。

  3. 右侧面板显示目标服务器路径。

  4. 拖拽文件或右键菜单选择"复制到..."即可完成跨服务器传输。

Netcatty SFTP 优势

  • 可视化操作:直观的文件浏览界面

  • 断点续传:大文件传输失败可继续

  • 多线程并发:提升传输速度

  • 内置编辑:无需额外工具修改配置文件

常用命令参考

命令

说明

示例

mput

批量上传文件

mput *.log

mget

批量下载文件

mget *.bak

lcd

更改本地目录

lcd /home/user

cd

更改远程目录

cd /var/log

mkdir

创建远程目录

mkdir backup

chmod

设置权限

chmod 755 data/

chown

更改所有者

chown www-data data/

bye

退出连接

bye

help

查看帮助

help

安全建议

  1. 使用密钥认证:避免密码暴露

    ssh-keygen -t ed25519 -C "your_email@example.com"
    ssh-copy-id user@server.example.com
  2. 限制访问范围:配置 SSH 允许仅特定 IP

  3. 定期轮换密钥:增强安全性

  4. 监控传输日志:记录所有跨服务器操作

常见问题排查

问题 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、跨服务器、运维

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区