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

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

  1. ssh [<user>@]<host>
  2. gpg -d <file-to-decrypt>
  3. 与gpg-agent进行交互和/或只input密码
  4. closuresSSH连接

但以更自动化的方式。 我只是想input一个单一的命令,脚本应该做的其余(密码(交互)input除外),即:

  1. remote-gpg [<user>@]<host> <file-to-decrypt>
  2. [查询密码而不用明文回显]
  3. [在stdout上转储解密的文本]并closuresSSH连接

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

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

  • 客户端的依赖性很小(理想情况下,只是ssh +核心实用程序)
  • 而不会在服务器端的套接字和pipe道上搞乱
  • 没有关于gpg-agent是否在服务器上运行的假设

所以,编写一个GNU expect脚本等解决scheme是没有问题的。

动机 :一个典型的用例是使用手机(运行Android)从远程服务器获取encryption的消息(例如密码)。 希望在信息传送时closures连接,因为在电话丢失/被盗之前,您可能会忘记注销,并且在没有猜测密码(因为每次都查询密码)的情况下,窃贼无法获取更多信息。 最后,从服务器的authorized_keys文件中删除手机的SSH密钥是防止安全漏洞所需要的。

顺便说一句,用这种方法会有什么额外的安全风险(与4步手动过程相比)?

 ssh -t user@host gpg -d file 

我认为这不应该比这更复杂。

解密的输出将被回显给您的terminal。 -t选项要求ssh请求一个tty,这是需要的,以便gpg可以在你的terminal上提示input密码。

这对我来说似乎没有四步法那么安全。

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

decrypt.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中。