tty割り当てを使用してSSHを介してGPGを実行するには?

tty割り当てを使用してSSHを介してGPGを実行するには?

SSHを介してリモートGPGインストールを使用してローカルファイルを暗号化して署名しようとしています。

pv file | ssh -tt [ssh server] gpg -se -r [receipt key] > file.gpg

ダブル使用ティーオプションはgpg "cannot open '/dev/tty': No such device or address"エラーを除去します。ただし、gpgへの入力として送信されるのではなく、暗号化されたコンテンツはsshパスワードプロンプトの直後に印刷されます。その後、入力は閉じられてgpgで停止し、署名のために秘密鍵のロックを解除するためのパスワードを要求します(またはファイルが大きすぎる場合はSSH接続を閉じます)。

SSHを介して実行される対話型コマンドの入力にデータを渡す正しい方法は何ですか?

ベストアンサー1

ssh(あなたがしたように)にデータを転送するはいこれは、SSHを介して実行されるコマンドに入力データを渡す正しい方法です。

ここで問題はgpg必要性です二つ読み取る入力ストリーム:

  • 暗号化するデータを読み取るもの(STDIN)、
  • パスワードを読むための別の(対話型端末/dev/tty)(これが-tオプションを渡す理由ですssh)。

2つを組み合わせて2つの目的でSTDINを使用する場合は、両方の入力を分離するためにEOF信号を送信する方法が必要です。ただし、sshファイルの終わりも読み取られ、渡された入力ストリームは閉じられます。

私が考えることができる唯一の実用的な解決策は、データをファイルに保存して使用することですgpg(必須二つ別々に呼び出されますssh)::

pv file | ssh ... '(umask 077; cat > file.unencrypted)'
ssh -t ... 'gpg -se -r ... < file.unecrypted > file.gpg; rm -f file.unencrypted'

おすすめ記事