ssh 経由で gpg-agent を使用する

ssh 経由で gpg-agent を使用する

単一のコマンド ラインを使用して ssh 経由で gpg-agent を使用するときに問題が発生します。

私の設定は次のとおりです:

サーバー A: ssh 経由でコマンドをトリガーします。

ssh user@serverB "sudo -E /path/to/script.sh"

サーバー B: パスフレーズ署名を必要とするスクリプトを実行しています。

システム情報: Ubuntu 12.04

サーバー B に gpg-agent をセットアップし、次の設定を /home/user/.bashrc に追加しました:

Invoke GnuPG-Agent the first time we login.                                                                          
# Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?                                    
if test -f $HOME/.gpg-agent-info && \
    kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
    GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
else
    # No, gpg-agent not available; start gpg-agent                                                                     
    eval `gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info`
fi
export GPG_TTY=`tty`
export GPG_AGENT_INFO

/home/user/.gnupg/gpg-agent.conf のエージェントの設定は次のとおりです。

enable-ssh-support
#1 year cache support
default-cache-ttl 31536000
default-cache-ttl-ssh 31536000
max-cache-ttl 31536000
max-cache-ttl-ssh 31536000
#debug-all

これを機能させるには、 ssh 経由で serverB に接続します。

ssh user@serverB

gpg-agent が起動したら、スクリプトを手動でトリガーします。

sudo -E /path/to/script.sh

次に、gpg-agent がパスフレーズの入力を要求します。パスフレーズを設定すると、スクリプトを再度実行でき、パスフレーズを要求されずにタスクが実行されます。

私の問題は、たとえば次のようにして遠隔的にトリガーしようとするときです:

ssh user@serverB "sudo -E /path/to/script.sh"

スクリプトがパスフレーズを要求し続けるので、gpg-agent が動作していないようです。

編集:

sudo パスワードなしでリモートでスクリプトをトリガーし、環境変数を保持するために、次の内容を /etc/sudoers.d/user に追加しました。

user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh

何か案は?

答え1

ログインしてssh user@serverB手動でスクリプトを実行すると、最初にパスフレーズの入力を求められます。その後、スクリプトを実行すると、shh-agent によって保存されているパスフレーズが提供されます。

ただし、実行するたびssh user@serverB "sudo -E /path/to/script.shに新しいログインを実行するため、ssh-agent は個別の SSH ログインでパスフレーズを保存することをサポートしないと思われます。

キーチェーンは必要な機能を備えているようです:http://www.funtoo.org/キーチェーン

キーチェーンを使用すると、ローカル マシンを再起動するたびにパスフレーズを 1 回入力するだけで済みます。また、キーチェーンを使用すると、リモート cron ジョブが長時間実行される ssh-agent プロセスに安全に「フック」しやすくなり、スクリプトでキーベースのログインを利用できるようになります。

現在のバージョンのキーチェーンは、ssh-agent だけでなく gpg-agent もサポートしています。

関連情報