首页主机资讯如何在Ubuntu上使用SFTP进行备份

如何在Ubuntu上使用SFTP进行备份

时间2025-11-25 19:56:03发布访客分类主机资讯浏览627
导读:在 Ubuntu 上使用 SFTP 进行备份 一 准备与连接方式 安装客户端:大多数 Ubuntu 已内置 SFTP 客户端。如需安装或补装,执行:sudo apt-get install openssh-client。 建立连接:使用命...

在 Ubuntu 上使用 SFTP 进行备份

一 准备与连接方式

  • 安装客户端:大多数 Ubuntu 已内置 SFTP 客户端。如需安装或补装,执行:sudo apt-get install openssh-client
  • 建立连接:使用命令 sftp username@remote_host,默认端口 22;也可在命令中指定端口:sftp -P 2222 username@remote_host
  • 基本交互:连接后可用 lscdpwd 浏览远程;get 下载、put 上传;exit 退出。
  • 目录传输:递归上传/下载目录使用 put -r / get -r
  • 图形化工具:如需可视化操作,可使用 FileZillaWinSCP 等支持 SFTP 的客户端。

二 手动备份与恢复操作

  • 本地 → 远程(上传备份)
    1. 交互式:sftp user@host,进入交互后执行 put -r /path/to/local/dir /remote/backup/
    2. 非交互式(Here-document):
      sftp user@host <
          <
          'EOF'
      mkdir -p /remote/backup/2025-11-25
      put -r /path/to/local/dir /remote/backup/2025-11-25
      bye
      EOF
      
  • 远程 → 本地(下载恢复)
    • 交互式:get -r /remote/backup/2025-11-25 /path/to/restore/
    • 非交互式:
      sftp user@host <
          <
      'EOF'
      get -r /remote/backup/2025-11-25 /path/to/restore/
      bye
      EOF
      
  • 说明:SFTP 本身不支持断点续传与增量同步;若需这些能力,可改用 rsync over SSH 或在脚本中自行实现校验与重试逻辑。

三 自动化备份脚本与定时任务

  • 方式 A(SFTP 脚本 + cron)
    #!/usr/bin/env bash
    set -Eeuo pipefail
    
    LOCAL_DIR="/path/to/local/data"
    REMOTE_USER="backupuser"
    REMOTE_HOST="your.server.ip"
    REMOTE_DIR="/remote/backup"
    LOG="/var/log/sftp_backup.log"
    TS=$(date +%F_%H-%M-%S)
    
    mkdir -p "$LOCAL_DIR"
    
    {
        
      echo "[$TS] Start backup to $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
      sftp "$REMOTE_USER@$REMOTE_HOST" <
        <
    EOF
      mkdir -p "$REMOTE_DIR/$TS"
      put -r "$LOCAL_DIR" "$REMOTE_DIR/$TS"
      bye
      EOF
      echo "[$TS] Backup completed."
    }
         >
        >
         "$LOG" 2>
        &
        1
    
    • 赋权与定时:
      chmod +x /usr/local/bin/sftp_backup.sh
      crontab -e
      # 每天 02:00 执行
      0 2 * * * /usr/local/bin/sftp_backup.sh
      
  • 方式 B(推荐)使用 rsync over SSH(具备增量、断点续传、权限与时间戳保留等优势)
    # 本地 → 远程
    0 2 * * * rsync -a -v -z --delete -e ssh /path/to/local/data/ backupuser@your.server.ip:/remote/backup/data/
    
    # 远程 → 本地
    0 3 * * * rsync -a -v -z --delete -e ssh backupuser@your.server.ip:/remote/backup/data/ /path/to/local/restore/
    
  • 密钥认证(免密与更安全):
    ssh-keygen -t rsa -b 4096 -C "backup@$(hostname)"
    ssh-copy-id backupuser@your.server.ip
    
    完成后即可在脚本与 cron 中无密码执行。

四 作为 SFTP 服务器接收备份的配置要点

  • 安装服务:sudo apt update & & sudo apt install openssh-server
  • 配置 SFTP(示例为仅允许 sftpusers 组使用 internal-sftp 并 chroot 到家目录):
    sudo nano /etc/ssh/sshd_config
    
    确保包含:
    Subsystem sftp internal-sftp
    
    Match Group sftpusers
        ChrootDirectory %h
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no
    
  • 创建用户与目录权限:
    sudo groupadd sftpusers
    sudo useradd -m -G sftpusers backupuser
    sudo passwd backupuser
    sudo chown root:root /home/backupuser
    sudo chmod 755 /home/backupuser
    # 备份数据目录放在子目录并赋权给该用户
    sudo mkdir -p /home/backupuser/backup
    sudo chown backupuser:backupuser /home/backupuser/backup
    
  • 使配置生效:sudo systemctl restart sshd
  • 防火墙放行:sudo ufw allow 22/tcp

五 安全与可靠性建议

  • 优先使用 SSH 密钥认证,禁用密码登录(在 /etc/ssh/sshd_config 设置 PasswordAuthentication no 并重启 sshd)。
  • 为备份用户配置 最小权限chroot,仅授予备份目录写入权限。
  • 保留多份历史备份(如按日期目录),并定期在本地或异机验证可恢复性。
  • 为脚本输出日志并接入监控告警;对关键数据在传输前后做 校验(如 sha256sum)
  • 如需压缩归档再传输,可在脚本中使用 tar czf 打包后再 put,以减小体积与传输时间。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在Ubuntu上使用SFTP进行备份
本文地址: https://pptw.com/jishu/755890.html
Debian系统Laravel项目如何实现多语言支持 Debian下Laravel项目如何进行单元测试

游客 回复需填写必要信息