我想tar,使用xz压缩,然后使用密钥文件使用gpg对称加密。 我可以通过for循环来实现这一点,但我更愿意通过管道来实现。
我尝试了以下操作,但由于"不明确的输入重定向而导致其无法正常工作":
tar cvf /home/user/backupdir | xz -1 | gpg -c --batch --passphrase-fd 0 --yes --symmetric --cipher-algo TWOFISH --digest-algo SHA512 -o backupdir.tar.xz.gpg < keyfile
有人可以帮我解决这个问题吗,通过管道进行加密和解密?
谢谢!
答案 0 :(得分:3)
你基本上是这样做的:
tar | xz | gpg <file
在这个链中,你告诉gpg从文件和上一个命令中获取输入。
您只能从两个来源读取一个STDIN。
手册页提供了一些解决方案:
--passphrase-fd n
Read the passphrase from file descriptor n. Only the first line will
be read from file descriptor n. If you use 0 for n, the passphrase
will be read from STDIN. This can only be used if only one
passphrase is supplied. Note that this passphrase is only used if
the option --batch has also been given. This is different from gpg.
--passphrase-file file
Read the passphrase from file file. Only the first line will be read
from file file. This can only be used if only one passphrase is sup‐
plied. Obviously, a passphrase stored in a file is of questionable
security if other users can read this file. Don't use this option if
you can avoid it. Note that this passphrase is only used if the
option --batch has also been given. This is different from gpg.
--passphrase string
Use string as the passphrase. This can only be used if only one
passphrase is supplied. Obviously, this is of very questionable
security on a multi-user system. Don't use this option if you can
avoid it. Note that this passphrase is only used if the option
--batch has also been given. This is different from gpg.
由于您已在文件中使用密码,因此第二个选项对您来说很合适。
如果第二个选项不可用或无法使用你的gpg版本,你可以使用第一个选项:
gpg --passphrase-fd 3 3<keyfile
在这种情况下,gpg将获取STDIN上的数据和文件描述符3上的密钥文件。
答案 1 :(得分:1)
gpg从stdin获取加密数据,但你也指定密码来自stdin,--passphrase-fd 0
。这会让gpg感到困惑。
可能cat
另一个文件描述符(例如3)的密钥文件,在开头使用cat keyfile > &3
,然后使用--passphrase-fd 3
。
答案 2 :(得分:1)
对于这些情况,存在命名或匿名管道。您的命令行也有多个设计缺陷。
1)仔细阅读联机帮助页。来自gpg的-c和--symmetric标志也是如此。
2)gpg使用压缩作为标准,因此命令行中有两种压缩方案。删除xz或使用gpg中的-z 0标志。
3)-cipher-algo和--digest-algo flags,没有按你的想法行事,在这里也没用。它们仅用于邮件加密。使用--s2k- *标志代替对称加密。示例:
KEY="secret" or KEY="$(cat /path/to/keyfile)"
tar -cvf - /home/user/backupdir | gpg --yes --batch --symmetric --passphrase-file <(echo "$KEY") --s2k-cipher-algo twofish --s2k-digest-algo sha512 -o backupdir.tar.gpg
&lt;(....)被称为匿名管道,(....)之间的结果将是一个文件描述符(主要是/ dev / fd / 63),其中包含您的密码。此文件描述符仅在gpg的生命周期内存在,并且只有gpg可以立即读取或写入。此外,命令行将始终在ps,top或/ proc / PID / cmdline中显示/ dev / fd / 63,而不是原始密码。因此,这是一种将密码短语移交给进程的安全方法,这些进程无法从标准输入中读取密码。