基于高山的重复图像中的“ Not tty”错误

Gym*_*nae 4 gnupg amazon-s3 docker duplicity alpine-linux

这是我在stackoverflow上遇到的第一个问题,因此我希望它遵循社区准则:

我已经基于一个已经存在的映像构建了一个docker 映像,其唯一目的是在容器中运行双重性以将文件和文件夹备份到欧洲的Amazon S3存储桶。

当在由图像产生的容器内手动运行时,Duplicity工作了几天。现在,我继续使用CoreOS通过主机上的单元文件运行容器,但事情不再起作用-但是该命令也无法正常运行,我在一个双重容器中手动运行了它。

运行命令:

 docker run --rm  --env-file=<my backup env file>.env --name=<container image> -v <cache container>:/home/duplicity/.cache/duplicity -v <docker volume with gpg keys>:/home/duplicity/.gnupg --volumes-from <docker container of interest> gymnae/duplicity
Run Code Online (Sandbox Code Playgroud)

env文件包含以下内容:

PASSPHRASE=<my super secret passphrase>
AWS_ACCESS_KEY_ID=<my aws access key id>
AWS_SECRET_ACCESS_KEY=<my aws access key>
SOURCE_PATH=<where does the data come from>
REMOTE_URL=s3://s3.eu-central-1.amazonaws.com/<my bucket>
PARAMS_CLEAN="--remove-older-than 3M --force --extra-clean"
ENCRYPT_KEY=<derived from the gpg key>
Run Code Online (Sandbox Code Playgroud)

并且init.sh被调用的docker run看起来像这样:

#!/bin/sh
duplicity \
         --verbosity 8 \
         --s3-use-ia \
         --s3-use-new-style  \
         --s3-use-server-side-encryption \
         --s3-european-buckets \
         --allow-source-mismatch \
         --ssl-no-check-certificate \
         --s3-unencrypted-connection \
         --volsize 150 \
         --gpg-options "--no-tty" \
         --encrypt-key $ENCRYPT_KEY \
         --sign-key $ENCRYPT_KEY \
        $SOURCE_PATH \
        $REMOTE_URL
Run Code Online (Sandbox Code Playgroud)

我试着用-i-it-t和公正的-d-但结果总是相同的:

===== Begin GnuPG log =====
gpg: using "<supersecret>" as default secret key for signing
gpg: signing failed: Not a tty
gpg: [stdin]: sign+encrypt failed: Not a tty
===== End GnuPG log =====

GPG error detail: 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 1380, in main
    do_backup(action)
  File "/usr/bin/duplicity", line 1508, in do_backup
    incremental_backup(sig_chain)
  File "/usr/bin/duplicity", line 662, in incremental_backup
    globals.backend)
  File "/usr/bin/duplicity", line 425, in write_multivol
    at_end = gpg.GPGWriteFile(tarblock_iter, tdp.name, globals.gpg_profile, globals.volsize)
  File "/usr/lib/python2.7/site-packages/duplicity/gpg.py", line 356, in GPGWriteFile
    file.close()
  File "/usr/lib/python2.7/site-packages/duplicity/gpg.py", line 241, in close
    self.gpg_failed()
  File "/usr/lib/python2.7/site-packages/duplicity/gpg.py", line 226, in gpg_failed
    raise GPGError(msg)
GPGError: GPG Failed, see log below:
===== Begin GnuPG log =====
gpg: using "<supersecret>" as default secret key for signing
gpg: signing failed: Not a tty
gpg: [stdin]: sign+encrypt failed: Not a tty
===== End GnuPG log =====
Run Code Online (Sandbox Code Playgroud)

Not a ttygpg尝试签名时出现此错误,很奇怪。

以前似乎没有什么问题,或者我在一个深夜班上做了一些疯狂的打字,但它曾经起作用过,但是现在它不再想要工作了。

Gym*_*nae 6

对于遇到同样问题的人,我找到了答案,这要感谢duply https://sourceforge.net/p/ftplicity/bugs/76/#74c5的开发人员

简而言之,您需要添加GPG_OPTS='--pinentry-mode loopback'从gpg 2.1开始并添加allow-loopback-pinentry.gnupg/gpg-agent.conf

这使我更接近工作设置。

  • 通过将 `pinentry-mode` long 选项直接添加到 `gpg` 命令本身(不需要修改 `*.conf` 文件),我就被解除了阻塞。在此之前,我收到了相同的“Not a tty”错误消息。谢谢你的提示! (2认同)
  • 就我而言,在〜/ .gnupg / gpg.conf中设置`pinentry-mode loopback`可以解决问题 (2认同)