Linux
如何通過 SSH 自動解密 GPG 文件?
我想使用 GnuPG 來解密儲存在遠端主機(執行 Linux)上的短消息,即:
ssh [<user>@]<host>
gpg -d <file-to-decrypt>
- 與 gpg-agent 互動和/或只需輸入密碼
- 關閉 SSH 連接
但以更自動化的方式。我只想輸入一個命令,腳本應該完成其餘的工作(除了(互動式)密碼輸入),即:
remote-gpg [<user>@]<host> <file-to-decrypt>
- $$ query for password without echoing it back in plaintext $$
- $$ dump the decrypted text on stdout $$並關閉 SSH 連接
我的主要挑戰是合併“ssh”和“gpg”步驟。
我正在尋找一種簡單有效的方法來實現這一目標:
- 對客戶端的依賴很少(理想情況下,只是
ssh
+ 核心實用程序)- 不會在伺服器端過多地使用套接字和管道
- 不假設是否
gpg-agent
在伺服器上執行因此,編寫 GNU
expect
腳本之類的解決方案是毫無疑問的。動機:一個典型的案例是使用手機(執行 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 中。