我正在尝试解密 gpg 文件,但不断收到以下错误:
gpg:解密失败:会话密钥错误
后来我意识到 gpg 密码(由脚本设置)中有一个感叹号
密码短语="我的密码"
通过 TTY 设置时,bash 会抱怨
-bash:!pass:未找到事件
当我回显该变量时,它未设置。
user@host:~$ echo $passphrase
user@host:~$
因此,变量是未知的,我认为这就是我无法解密文件的原因。
我尝试使用以下密码:
- 我的通行证
- 我的
- !经过
- '我的!通行证'
- -bash:!pass:未找到事件
- bash:!pass:未找到事件
- 狂欢:
- 重击:
- 未找到事件
可以肯定的是,我刚刚在这里学到了一个非常痛苦的教训,但值得一试。
有人能帮忙吗:
- 如果您尝试使用未设置的变量,bash 会如何处理它?
- 脚本如何处理未设置的变量?
- 除了密码我还能尝试其他什么吗?
- 是否有一个 ASCII / UTF 空格代码可以代替密码?
答案1
有几条评论值得注意。
- “... gpg 密码(由脚本设置)”。我认为您没有编写该脚本。请发布该脚本。是否有任何使用说明?
passphrase="my!pass"
。这并不意味着“使用 ! 作为字符串的一部分”。!pass
意思是“读取历史记录,并获取以 开头的最后一个命令pass
”。如果历史记录中没有以 开头的命令pass
,则会引发错误bash: !pass: event not found
,就像您在命令行中获取的那样。这就是为什么我猜你没有编写脚本。它是为历史记录中有一些以 开头的命令的情况而设计的pass
。- “通过 TTY 设置时(我猜你执行了
passphrase="my!pass"
),bash 抱怨...当我回显变量时,它未被设置”。如上所述,引发了一个错误。但还有两件事发生:1)命令未执行。即,您甚至没有得到“my”(您可能期望得到“my”=“my”+空字符串)作为 的值passphrase
,它保持未设置状态。2)该命令甚至没有添加到历史记录中。
至于您的一些问题:
- 如果您尝试使用未设置的变量,bash 会如何处理它?bash 通常将其替换为空字符串。但一般来说,这取决于如何使用它,它可能会引发错误,您可能会有一个句子,在未设置的情况下将其值替换为默认值,等等。对此没有唯一的答案。
- 脚本如何处理未设置的变量?同上。
我不知道您的其他问题,但这也许有助于您理解问题并解决它。