温馨提示×

如何使用Ubuntu SFTP进行文件同步

小樊
36
2025-12-22 23:58:43
栏目: 智能运维

Ubuntu 下使用 SFTP 进行文件同步的实用指南

一 核心思路与准备

  • SFTP(SSH File Transfer Protocol)基于SSH运行,默认端口为22。要稳定同步,先确保两端网络可达,并在远端安装并启动 SSH 服务:sudo apt update && sudo apt install openssh-server;sudo systemctl enable --now ssh。若连接被拒绝,检查服务状态与端口连通性。为提升效率,建议使用基于密钥的登录(免密)。

二 交互式 SFTP 的基本用法

  • 建立连接:在本地终端执行 sftp user@host(如:sftp alice@192.168.1.10),按提示输入密码即可进入 sftp> 提示符。
  • 常用命令:
    • 列目录:ls(远程)、lls(本地)
    • 切换目录:cd(远程)、lcd(本地)
    • 上传:put local_file;递归上传目录:put -r local_dir
    • 下载:get remote_file;递归下载目录:get -r remote_dir
    • 退出:exit 或 bye
  • 小技巧:用 lcd 先切到本地目录,再用 put/get,可避免路径错误;遇到大目录可先用 ls/lls 确认结构再操作。

三 用 SFTP 实现“准同步”的脚本示例

  • 场景:将本地目录**/data与远端/backup**保持“基本一致”(新增/修改的文件拷过去;远端多余文件暂不删除)。
  • 思路:在远端用 find 生成“按修改时间筛选的新/变更文件清单”,本地下载该清单后,用 sftp 的 -b 批处理模式逐条 put。
  • 步骤与脚本:
    1. 在远端生成清单(仅相对路径,便于 put): ssh alice@192.168.1.10 ‘cd /backup && find . -type f -mtime -1 -print’ > remote_new.txt
    2. 本地生成“待上传清单”(避免重复上传已存在文件): while IFS= read -r rel; do [[ -f “/data/$rel” ]] && echo “$rel” done < remote_new.txt > to_upload.txt
    3. 用 sftp 批处理上传(自动建立缺失的子目录): sftp -b - alice@192.168.1.10 <<‘EOF’ cd /backup $(while IFS= read -r f; do echo “mkdir -p $(dirname "$f")” echo “put "/data/$f" "$f"” done < to_upload.txt) EOF
  • 说明:
    • 上述示例以“最近1天(-mtime -1)”为筛选条件,可按需改为 -mmin、或去掉时间条件同步全部差异。
    • 该方式“安全、可控”,但非真正镜像(不会自动删除远端多余文件);如需镜像,请参考下一节的 rsync 方案。

四 更高效的镜像同步方案 rsync over SSH

  • 若允许安装工具,优先使用rsync over SSH做同步/镜像,具备增量、断点续传、权限保留等优势:
    • 安装:sudo apt install rsync
    • 基本用法:
      • 本地到远端:rsync -a /data/ alice@192.168.1.10:/backup/
      • 远端到本地:rsync -a alice@192.168.1.10:/backup/ /data/
    • 常用选项:
      • -a(归档,保留权限/时间/链接等)、-v(详细)、-P(显示进度并支持断点续传)
      • –delete(镜像删除,让远端与源端一致)、–exclude=‘*.tmp’(排除规则)
      • 指定 SSH 端口:rsync -a -e “ssh -p 2222” /data/ alice@192.168.1.10:/backup/
  • 提示:目录末尾的斜杠“/”有语义区别;源路径带斜杠表示“同步目录内容”,不带斜杠表示“同步目录本身”。

五 常见问题与排查

  • 连接被拒绝或超时:确认远端已安装并运行 SSH(sudo systemctl status ssh),以及本机可 ping 通远端;必要时检查防火墙/云安全组是否放行22端口。
  • 权限被拒绝(Permission denied):核对远端用户对目标目录的读写/执行权限;必要时用 sudo 或调整目录 ACL/属主。
  • 大文件中断:交互式 sftp 不支持断点续传;改用 rsync -P 或先分片/压缩再传。
  • 频繁手工操作:配置 SSH 免密登录(ssh-keygen;ssh-copy-id user@host),并在脚本中使用 sftp -b 或 rsync 自动化执行。

0