如何通过 SSH 自动解密 GPG 文件?

如何通过 SSH 自动解密 GPG 文件?

我想使用 GnuPG 解密存储在远程主机(运行 Linux)上的短信,即:

  1. ssh [<user>@]<host>
  2. gpg -d <file-to-decrypt>
  3. 与 gpg-agent 交互和/或直接输入密码
  4. 关闭 SSH 连接

但采用更自动化的方式。我只想输入一个命令,脚本应该会完成其余工作(除了(交互式)输入密码),即:

  1. remote-gpg [<user>@]<host> <file-to-decrypt>
  2. [查询密码但不以明文形式返回]
  3. [将解密后的文本转储到标准输出] 并关闭 SSH 连接

我的主要挑战是合并“ssh”和“gpg”步骤。

我正在寻找一种简单有效的方法来实现这一目标:

  • 尽可能少地依赖客户侧(理想情况下,仅ssh+ 核心实用程序)
  • 无需在服务器端处理大量套接字和管道
  • 无需假设是否gpg-agent在服务器上运行

因此,编写 GNUexpect脚本之类的解决方案是不可能的。

动机:一个典型的用例是使用手机(运行 Android)从远程服务器检索加密消息(例如密码)。信息传递后关闭连接是理想的,因为您可能会在手机丢失/被盗之前忘记注销,而小偷无法在不猜出密码的情况下检索更多信息(因为每次都会查询密码)。最后,从服务器的 authorized_keys 文件中删除手机的 SSH 密钥即可防止安全漏洞。

顺便问一下,这种方法是否会有额外的安全风险(与 4 步手动流程相比)?

答案1

ssh -t user@host gpg -d file

我认为事情没必要比这更复杂。

解密后的输出将回显到您的终端。该-t选项要求 ssh 请求一个 tty,这是 gpg 可以在您的终端上提示输入密码所必需的。

在我看来,这与您的 4 步方法一样安全。

答案2

tldr 你想要有人为你写代码。幸运的是,我已经有类似的东西了。

解密.sh:

#!/bin/bash
# Get our original tty and turn off -echo
stty_orig=`stty -g` stty -echo 
read Pass
# type in your pass for gpg.
gpg --passphrase="$Pass" --no-tty -d $1
# Output goes to STDOUT
stty $stty_orig

调用方式:

ssh -t user@host 'decyrpt.sh File'

假设:您的文件位于主目录中,并且 decrypt.sh 位于您的 $PATH 中。

相关内容