Restic 快速入门:SFTP 备份
为了通过 SFTP 备份数据,您必须首先设置一个带有 SSH 的服务器并让其知道您的公钥。无密码登录非常重要,因为如果服务器提示输入凭据,则无法进行自动备份。
主机间免密钥互信
为了通过 SFTP 备份数据,你首先必须设置一个带有 SSH 的服务器并让其知道你的公钥。无密码登录非常重要,因为如果服务器提示输入凭据,则无法进行自动备份。为了解决这个问题,我们可以使用SSH密钥对进行身份验证,实现无密码登录。
- 生成SSH密钥对
首先,我们需要在本地计算机上生成一对SSH密钥,包括私钥和公钥。私钥用于解密和签名,而公钥则用于加密和验证签名。在终端中执行以下命令:
这个命令会提示你输入一些信息,如密钥的存储位置和密码等。如果你不希望在每次使用私钥时都输入密码,可以留空密码。完成后,你会在指定的位置(默认是ssh-keygen -t rsa
~/.ssh/id_rsa
)找到私钥,同时在同一个目录下生成公钥文件(默认是~/.ssh/id_rsa.pub
)。 - 复制公钥到远程服务器
接下来,我们需要将公钥复制到远程Linux服务器上。在复制之前,请确保你已经拥有远程服务器的SSH访问权限。使用以下命令将公钥复制到远程服务器:
这个命令会自动将公钥添加到远程服务器的# ssh-copy-id username@remote_host ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.31.2
~/.ssh/authorized_keys
文件中,并设置适当的权限。如果你没有安装ssh-copy-id
命令,也可以手动复制公钥到远程服务器,然后将其添加到authorized_keys
文件中。 - 配置SSH连接
一旦公钥被成功地复制到远程服务器上,我们就可以配置SSH连接以实现无密码登录。在本地计算机上,打开~/.ssh/config
文件(如果不存在,则创建一个),并添加以下内容:vi ~/.ssh/config Host remote_host HostName remote_host_ip User username IdentityFile ~/.ssh/id_rsa
免密码
每次备份的时候,都需要输入密码,肯定不适合脚本自动备份,所以我们还需要使用
--password-file
参数来达到自动读取密码的步骤。
# 先将restic仓库密码,比如 test 保存在 /root/resticpasswd 文本中
echo '仓库密码' > /root/resticpasswd
为了自动向 restic 提供存储库密码,有几种选择:
- 设置环境变量 RESTIC_PASSWORD
- 通过
--password-file
选项或环境变量指定带有密码的文件路径 RESTIC_PASSWORD_FILE - 通过
--password-command
选项或环境变量,配置在需要密码时调用的程序RESTIC_PASSWORD_COMMAND
初始化备份
配置服务器后,只需更改命令中的 URL 方案即可轻松实现 SFTP 存储库的设置init:
restic -r sftp:user@host:/srv/restic-repo init
enter password for new repository:
enter password again:
created restic repository f1c6108821 at sftp:user@host:/srv/restic-repo
Please note that knowledge of your password is required to access the repository.
Losing your password means that your data is irrecoverably lost.
您还可以指定一个相对目录
(注意:没有字符/
开头的目录),在这种情况下,该目录相对于远程用户的主目录。
此外,如果 SFTP 服务器强制使用域内的用户,您可以按以下方式指定用户:user@domain@host
。
说明:
请注意,SFTP 服务器不会扩展通常用作用户主目录别名的~
符号。如果要指定相对于用户主目录的路径,请将相对路径传递给 SFTP 后端。
如果需要指定端口号或 IPv6 地址,则需要使用 URL 语法。例如,可以这样指定/srv/restic-repo
位于[::1](localhost)
端口 2222 的存储库和用户名user
sftp://user@[::1]:2222//srv/restic-repo
请注意双斜线:第一个斜线将连接设置与路径分隔开,而第二个斜线是路径的开头。要指定相对路径,请使用一个斜线。
或者,您可以在ssh
配置文件中创建一个Entity,该配置文件通常位于您的主目录~/.ssh/config
或/etc/ssh/ssh_config
中:
Host foo
User bar
Port 2222
然后正常使用指定的主机名foo(这种情况下不需要指定用户名):
$ restic -r sftp:foo:/srv/restic-repo init
您还可以添加一个不存在的特殊主机名的条目,仅供 restic 使用,并使用该Hostname选项设置真实主机名:
Host restic-backup-host
Hostname foo
User bar
Port 2222
然后在后端规范中使用它:
$ restic -r sftp:restic-backup-host:/srv/restic-repo init
最后,如果您想使用完全不同的程序来创建 SFTP 连接,您可以使用-o sftp.command="foobar"
选项指定要运行的命令 。或者,-o sftp.args
允许设置传递给默认 SSH 命令的参数( 当 sftp.command
设置时忽略)
说明:
请注意,当客户端未收到任何数据时,SFTP 服务器会关闭连接。当 restic 处理大量未更改的数据时,可能会发生这种情况。为避免此问题,请将以下几行添加到客户端的.ssh/config
文件中:
ServerAliveInterval 60
ServerAliveCountMax 240
最后编辑:Jeebiz 更新时间:2024-11-01 12:20