web-dev-qa-db-ja.com

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

何か案は?

8
Tony

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

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

キーチェーンはあなたが必要とすることをしているようです: http://www.funtoo.org/Keychain

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

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

1
v25