Linux

如何通過 SSH 自動解密 GPG 文件?

  • January 15, 2015

我想使用 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. $$ query for password without echoing it back in plaintext $$
  3. $$ dump the decrypted text on stdout $$並關閉 SSH 連接

我的主要挑戰是合併“ssh”和“gpg”步驟。

我正在尋找一種簡單有效的方法來實現這一目標:

  • 客戶端的依賴很少(理想情況下,只是ssh+ 核心實用程序)
  • 不會在伺服器端過多地使用套接字和管道
  • 不假設是否gpg-agent在伺服器上執行

因此,編寫 GNUexpect腳本之類的解決方案是毫無疑問的。

動機:一個典型的案例是使用手機(執行 Android)從遠端伺服器檢索加密消息(例如密碼)。需要在資訊傳遞時關閉連接,因為您可能會在手機失去/被盜之前忘記註銷,並且小偷在不猜測密碼的情況下無法檢索其他資訊(因為每次都會查詢密碼)。最後,從伺服器的 authorized_keys 文件中刪除手機的 SSH 密鑰是防止安全漏洞的全部方法。

順便說一句,這種方法是否會有任何額外的安全風險(與 4 步手動過程相比)?

ssh -t user@host gpg -d file

我不認為它必須比這更複雜。

解密後的輸出將回顯到您的終端。該-t選項要求 ssh 請求一個 tty,這是必需的,以便 gpg 可以在您的終端上提示輸入密碼。

這對我來說似乎並不比你的四步法更安全。

tldr 您希望有人為您編寫程式碼。幸運的是,我已經有類似的東西了。

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

引用自:https://serverfault.com/questions/629353