AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 772103
Accepted
grbll
grbll
Asked: 2024-03-11 21:57:18 +0800 CST2024-03-11 21:57:18 +0800 CST 2024-03-11 21:57:18 +0800 CST

正确的备份方法

  • 772

我想定期自动备份到我的家庭网络中的树莓派。在家时进行备份就足够了。

我读过的每本关于“如何进行自动备份”的指南都告诉我在我的 pi 上放置一个无密码的 ssh 密钥。我不想这样做,因为任何有权访问我的电脑的人都可以访问我的备份,这完全消除了备份的一个目的。

我当前的解决方案是受密码保护的 ssh-key 和 rsync 脚本。花了一些时间才使其正常工作,但现在我一登录家庭网络就会提示输入密码,然后进行备份。

现在我想使用,restic因为我需要某种类型的版本备份。我也想备份其他设备。Restic 指南再次告诉我使用无密码 ssh 密钥。

现在,我有了相反的想法。即我的(离线)pi 可以在没有密码的情况下 ssh 进入我的笔记本电脑(但限制resric使用)。我可以使用一个脚本运行一些 systemd.timer 来检查我的笔记本电脑是否可以访问并启动备份(如果是这种情况)。

然而,这看起来很老套,我确信这是一些常见的场景。但我找不到任何指南。

你能给我指出一个大致的方向吗?即使是一些术语也会有帮助,这样我就可以找到更多关于我想做的事情的信息!

ssh
  • 3 3 个回答
  • 97 Views

3 个回答

  • Voted
  1. Best Answer
    Kusalananda
    2024-03-12T04:33:14+08:002024-03-12T04:33:14+08:00

    结合restic使用,您可以使用提供REST APIrclone的服务在备份服务器上设置服务,该 API可以从您要备份的计算机连接到。使用 REST API 通常比通过 SFTP使用要快得多。rcloneresticresticrestic

    对此有详细记录rclone serve restic --help,包括如何使用 SSL 以及如何进行htpasswd身份验证。 您应该仔细阅读该文档。如果您的备份服务器是面向公众的(不应该如此),或者如果您这样做是为了某些非个人设置,则您将需要通过某种方式对个人用户进行身份验证来保护它。

    要将其设置为可从本地网络外部使用,您至少需要localhost在用作备份服务器的主机上进行以下设置:

    rclone serve restic --addr :8080 /var/backup/restic
    

    这里/var/backup/restic是您要存储存储库的路径restic(运行上述命令的用户需要在那里具有写入权限,因此您可能需要为此创建专用服务用户)。意思--addr :8080是“绑定到所有可用接口上的端口 8080”(默认情况下,rclone仅绑定到localhost:8080)。

    然后,您可以使用以下命令连接到此(这会初始化restic存储库并创建我的主目录的第一个快照):

    restic -r rest:http://backupsrv:8080/testrepo init
    restic -r rest:http://backupsrv:8080/testrepo backup "$HOME"
    

    这假设您要创建并使用restic名为 的存储库testrepo,并且您的备份服务器可以通过 访问backupsrv。您应该将该主机名替换为正确的名称或 IP 号码。

    这将以交互方式提示您输入存储库密码,但显然您可以RESTIC_PASSWORD像往常一样将其传递到环境变量中(就像您可以传递restic存储库RESTIC_REPOSITORY而不是使用-r ...)。


    在我的个人 Synology NAS 上,我运行以下 Docker 容器(这是一个docker-compose.yml文件):

    version: '3'
    services:
      rclone:
        image: rclone/rclone:latest
        container_name: rclone
        hostname: diskstation.local
        ports:
          - 18080:8080
        restart: unless-stopped
        command: ["serve","restic","/backup"]
        environment:
          - RCLONE_ADDR=0.0.0.0:8080
          - RCLONE_STATS=1h
          - RCLONE_VERBOSE=1
    
        volumes:
          - /volume1/Restic/backup:/backup
    

    它为resticNAS 上的端口 18080 上的 REST API 提供服务,并允许我将备份存储在其中/volume1/Restic/backup(通过绑定挂载到容器中)。请注意,设置中的安全性rclone很低,因为这是隔离 LAN 中的个人 NAS(位于防火墙和运营商级 NAT 后面)。

    • 2
  2. u1686_grawity
    2024-03-12T00:57:07+08:002024-03-12T00:57:07+08:00

    这个想法是拥有一个仅限于特定操作的无密码密钥。

    例如,使用 Restic(显然通过 SFTP 存储备份)或使用普通 rsync,您可以让备份服务器维护备份磁盘的 Btrfs/ZFS 快照,并使用 SSH 密钥访问没有 root 权限的帐户(因此无法删除快照)。如果有人使用密钥远程删除 Restic 存储库,则需要几秒钟的时间才能从最后一个快照恢复它,然后您将像平常一样继续笔记本电脑恢复。

    对于像 Borg Backup 这样的程序,它们有自己的“服务器”,可以通过 SSH 进行通信,您可以将密钥限制为仅特定的强制远程命令,这样它所能做的就是启动 Borg 服务器,而不是 SFTP 或 shell 。Borg 有一个“仅附加”选项,您可以在强制命令中使用该选项,使密钥只能用于上传新备份,而不能用于删除旧备份。

    然而,可以说,如果有人 1) 可以访问您笔记本电脑的未加密文件并且 2) 连接到您的家庭网络,那么您很可能会遇到更大的问题......

    • 1
  3. Chris Davies
    2024-03-12T06:38:16+08:002024-03-12T06:38:16+08:00

    我读过的每本关于“如何进行自动备份”的指南都告诉我在我的 pi 上放置一个无密码的 ssh 密钥。我不想这样做,因为任何有权访问我的电脑的人都可以访问我的备份,这完全消除了备份的一个目的。

    第一个陈述是正确的,但让我尝试解释一下我对此的理解。(以及最小特权的处理原则。)

    1. 您有一台想要备份的电脑
    2. 您想要保护您的备份,以便意外访问您电脑的某人/某物无法破坏您的备份

    这里的解决方案是从备份服务器(您的 Pi)而不是从您的 PC 驱动备份。如果您要rsync与ssh(Linux/Mac 客户端)或rsyncd(Windows 客户端)一起使用,请设置方案以便 Pi 可以访问 PC。(PC 不需要无密码访问 Pi。)

    一种典型的方法可能是在 Pi 上使用来cron频繁(例如每四小时一次)尝试备份 PC,但一旦成功,直到第二天才重试。该脚本未经测试,但应该为您提供解决方案的基础。重要的是要注意,这timeout 4h应该足以完成完整备份:

    basedir=/data/backup_dir                      # Backups target directory
    my_pc=192.168.130.33                          # Your PC name or IP address
    
    today=$(date +'%Y-%m-%d')                     # Today
    stamp=$(cat "$basedir/.stamp" 2>/dev/null)    # Date of last backup
    
    if [ "$today" = "$stamp" ]
    then
        # Last backup was today
        exit 0
    fi
    
    if ! ping -q -c1 "$my_pc"
    then
        # PC not responding to ping
        exit 1
    fi
    
    # Backup your PC
    if timeout 4h rsync -a "$my_pc":/…/ "$basedir/$today"
    then
        # Success
        echo "$today" >"$basedir/.stamp"
        exit 0
    fi
    
    • 1

相关问题

  • 为什么 ssh 实用程序被视为 pty?

  • Auto-SSH 手动工作,但不在后台工作

  • 远程运行 X 应用程序,在远程主机上运行 GUI [关闭]

  • rsync 端口 22 和 873 使用

  • SCP突然中止:管道损坏,消息验证码不正确

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve