web-dev-qa-db-ja.com

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. [復号化されたテキストをstdoutにダンプ]そしてSSH接続を閉じます

私の主な課題は、「ssh」と「gpg」のステップをマージすることです。

私はこれを達成するための簡単で効果的な方法を探しています:

  • client側への依存関係はほとんどありません(理想的には、ssh +コアユーティリティのみ)
  • サーバー側のソケットやパイプをいじることなく
  • gpg-agentがサーバー上で実行されているかどうかについての仮定なし

したがって、GNU expectスクリプトを作成するなどの解決策は問題外です。

動機:一般的な使用例は、電話(Androidを実行)を使用して、リモートサーバーから暗号化されたメッセージ(パスワードなど)を取得することです。電話が紛失/盗難される前にログアウトを忘れる可能性があり、泥棒はパスワードを推測せずに追加情報を取得できないため、情報配信時に接続を閉じることが望まれます(パスワードは毎回照会されるため)。最後に、サーバーのauthorized_keysファイルから電話のSSHキーを削除するだけで、セキュリティ違反を防ぐことができます。

ちなみに、そのアプローチには(4ステップの手動プロセスと比較して)追加のセキュリティリスクがありますか?

1
leden
ssh -t user@Host gpg -d file

それ以上に複雑である必要はないと思います。

復号化された出力は、端末にエコーバックされます。 -tオプションはsshにttyを要求するように要求します。これは、gpgが端末でパスワードの入力を求めるために必要です。

これは、あなたの4ステップの方法ほど安全ではないようです。

3
Andrew Schulman

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にあります。

1
ticoombs