SSHでgpg-agentを使用する


8

単一のコマンドラインで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が機能していないようです。

編集:

/etc/sudoers.d/userに次のコンテンツを追加して、sudoパスワードなしでスクリプトを遠隔でトリガーし、環境変数を維持します。

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

何か案は?


質問は許してください。でも、パスフレーズを求めているのですか?上記で示したものを使用すると、コマンドを認証するためにパスワードを要求することが予想されますsudo
MadHatter

私は遠隔で実行しようとするユーザー/コマンドのNOPASSWDを使用してsudoersファイルを管理しました。私もこれを正確にする必要があるかもしれません。パスフレーズを要求しています。
Tony

わかりました。明確にしてくれてありがとう、私は明白なものに噛まれないようにしたかっただけです!
MadHatter

回答:


1

でログインし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プロセスに安全に「フック」して、スクリプトがキーベースのログインを利用できるようになります。

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


sshチェーンに関する限り、あなたは間違っています。私はこれを1日に何度も行います。sshホストAからホストB、次にC、次にDへ。先頭のssh-agentがキー操作を常に実行します。
MadHatter

私の理解では、彼はエージェントを使用してAからBに接続しようとしているのではありません。サーバーBはssh-agentクライアントとしてセットアップされ(すべての意図と目的)、sudo -E /path/to/script.shサーバーBで実行すると、ここで何かがパスフレーズを要求します。編集:コメントを念頭に置いて、Aをエージェントクライアントとして構成し、ssh-agent転送を使用すると、パスフレーズを要求せずにサーバーBでスクリプトを実行できるようになります。 。
2013

それでは、サーバーAでgpg-agentをセットアップしてみます。ssh-agent転送に関する情報を入手しましたか?私はこれまでのところ、この記事を見てきました:superuser.com/questions/161973/...
トニー

これは十分に文書化されており、ここにガイドがあります:livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25

申し訳ありませんが、v25は正しかったようです。トニー、Bでエージェントを実行しても、接続は持続的でないため、機能しません。
MadHatter、2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.