我正在使用 Deja Dup 将我的笔记本电脑备份到 S3。这已经用于许多备份,但从 20 天前开始就停止工作了。
Traceback (most recent call last):
File "/usr/bin/duplicity", line 1532, in <module>
with_tempdir(main)
File "/usr/bin/duplicity", line 1526, in with_tempdir
fn()
File "/usr/bin/duplicity", line 1364, in main
action = commandline.ProcessCommandLine(sys.argv[1:])
File "/usr/lib/python2.7/dist-packages/duplicity/commandline.py", line 1108, in ProcessCommandLine
globals.backend = backend.get_backend(args[0])
File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 223, in get_backend
obj = get_backend_object(url_string)
File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 209, in get_backend_object
return factory(pu)
File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 161, in __init__
self.resetConnection()
File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 194, in resetConnection
raise e
S3ResponseError: S3ResponseError: 403 Forbidden
我已经验证了用户策略是正确的。我在 AWS 策略测试器中对它们进行了测试,并使用它们与 AWS CLI 一起列出了存储桶、从备份存储桶中读取数据以及向备份存储桶写入数据。
我的台式机上的备份仍然有效,并且使用相同的凭据。台式机和笔记本电脑的备份不进入同一个存储桶,但使用相同的用户凭据。
我的机器时间没有不同步。
我已经验证了 UI 和 dconf 编辑器中的 deja dup 设置在正确无误。
我使用笔记本电脑的次数比使用台式机的次数多,因此笔记本电脑可能进行了一些更新,从而导致一些问题,但我不确定是什么问题。
已经研究了几个小时,但还是不知所措。在不久的将来尝试升级到 18.04 之前,我希望有此备份。
版本信息:aws-cli/1.15.79 Python/2.7.12 Linux/4.15.0-30-generic botocore/1.10.78 boto 2.49.0
botocore 1.10.78
编辑:以上内容适用于 Ubuntu 16。我最近升级到了 Ubuntu 18,但仍然遇到问题。我认为是同一个问题,但日志略有不同。以下是 Ubuntu 18 上的内容:
DUPLICITY: ERROR 30 S3ResponseError
DUPLICITY: . Traceback (innermost last):
DUPLICITY: . File "/usr/bin/duplicity", line 1555, in <module>
DUPLICITY: . with_tempdir(main)
DUPLICITY: . File "/usr/bin/duplicity", line 1541, in with_tempdir
DUPLICITY: . fn()
DUPLICITY: . File "/usr/bin/duplicity", line 1380, in main
DUPLICITY: . action = commandline.ProcessCommandLine(sys.argv[1:])
DUPLICITY: . File "/usr/lib/python2.7/dist-packages/duplicity/commandline.py", line 1127, in ProcessCommandLine
DUPLICITY: . globals.backend = backend.get_backend(args[0])
DUPLICITY: . File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 223, in get_backend
DUPLICITY: . obj = get_backend_object(url_string)
DUPLICITY: . File "/usr/lib/python2.7/dist-packages/duplicity/backend.py", line 209, in get_backend_object
DUPLICITY: . return factory(pu)
DUPLICITY: . File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 166, in __init__
DUPLICITY: . self.resetConnection()
DUPLICITY: . File "/usr/lib/python2.7/dist-packages/duplicity/backends/_boto_single.py", line 191, in resetConnection
DUPLICITY: . location=self.my_location)
DUPLICITY: . File "/home/aaronloes/.local/lib/python2.7/site-packages/boto/s3/connection.py", line 628, in create_bucket
DUPLICITY: . response.status, response.reason, body)
DUPLICITY: . S3ResponseError: S3ResponseError: 403 Forbidden
DUPLICITY: . <?xml version="1.0" encoding="UTF-8"?>
DUPLICITY: . <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>XXXXXCENSORXXXXX</AWSAccessKeyId><StringToSign>PUT
我清除了日志中的密钥,但已验证这是正确的密钥。我不确定如何让 duplicity/dejadup 再次提示我输入 AWS 密钥,因为可能因为某种原因缓存不当?
awscli 1.15.79
Python 2.7.15rc1 4.15.0-38-通用 boto 2.49.0
botocore 1.10.78
编辑 能够让 deja-dup 提示我输入新凭证,但仍然没有任何变化。我毫不怀疑 duplicity 使用的是正确的凭证,而且我毫不怀疑凭证是有效的。
答案1
尝试重新安装 duplicity。大多数此类问题都可以通过简单的重新安装来解决。否则,请使用 tar 创建 / 的备份,其中包含 dialog 和以下代码:
#!/bin/sh
# Backup all files under / directory
# Display message with option to cancel
dialog --title "Backup" --msgbox "Time for backup! Press <Enter> to start backup or <Esc> to cancel." 0 0
# Return status of non-zero indicates cancel
if [ "$?" != "0" ]
then
dialog --title "Backup" --msgbox "Backup was canceled at your request." 0 0
else
tarlocation=$(dialog --inputbox "Where would you like to save the TAR file?" 0 0)
dialog --title "Backup" --infobox "Backup in progress..." 0 0
cd ~
# Backup using tar; redirect any errors to a
# temporary file
tar -czf $tarlocation 0 0 >|/tmp/ERRORS$$ 2>&1
# zero status indicates backup was successful
if [ "$?" = "0" ]
then
dialog --title "Backup" --msgbox "Backup completed successfully." 0 0
else
# Backup failed, display error log
dialog --title "Backup" --msgbox "Backup failed -- Press <Enter> to see error log." 0 0
dialog --title "Error Log" --textbox /tmp/ERRORS$$ 0 0
fi
fi
rm -f /tmp/ERRORS$$
clear
谢谢!
答案2
所以我终于搞明白了。这花了一段时间,因为我不再将有问题的电脑作为我的主力电脑。我最近需要使用它,于是决定再试一次,然后我就找到了答案。
在某个时候,boto(不太可能)或 duplicity/deja-dup 停止使用我在其配置中提供的凭据,并开始使用我在环境变量中设置的凭据。Boto 应该在查找环境之前获取提供的凭据,因此我假设它与 duplicity/deja-dup 有关。我知道发生了变化,因为我在拿到这台电脑的那天设置了备份和那些环境变量。
我删除了环境变量并且备份再次开始工作。
谜团终于解开了。