web-dev-qa-db-ja.com

Ubuntu16.04でgpg-agentを正しく起動する方法

スマートカードとして機能するgpg-keyがロードされたYubikey4があります。 gpg2 card-statusを実行すると、Shebang全体が表示され、すべてのサブキーが表示され、すべて問題ありません。

次に、gpg-agentを使用して、gpgキーを使用してリモートホストにSSH接続したいと思いました。 ~/.gnupg/gpg-agent.confに以下を追加しました

enable-ssh-support
pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 60

また、.bashrcのSSH_AUTH_SOCKを次のように設定します。

export SSH_AUTH_SOCK=~/.gnupg/S.gpg-agent.ssh

その後、マシンを再起動すると、キーが追加され、ssh-add -lで表示されます。

4096 SHA256....... cardno: ..... (RSA)

しかし、リモートサーバーにSSHで接続しようとすると、ハングします。ssh -vvvは、マシンが署名してキーを送信しようとしていることを通知しますが、エージェントは操作を拒否します。

次に、さまざまなソースを使用して作成したスクリプトを実行すると、すべて機能します。

   killall gpg
   export SSH_AUTH_SOCK=~/.gnupg/S.gpg-agent.ssh; gpg-agent --daemon --keet-tty --use-standard-socket --pinentry-program=/usr/bin/pinentry-curses 

私はbashrcを使用してこれを実装し、deskopt-managerとユーザーsystemdタスクを使用して実行しようとしましたが無駄でした。

「myscript」を実行せずに、ログイン時にこれを自動的に開始する方法を誰かが理解するのを手伝ってもらえますか?

1
chriskvik

短い答え:

Rootとして実行:

$ echo enable-ssh-support >> ~/.gnupg/gpg-agent.conf
# editor /etc/X11/Xsession.options
    ... comment out "use-ssh-agent" ...
# aptitude purge libpam-gnome-keyring

デスクトップセッションからログアウトして再度ログインし、$ SSH_AUTH_SOCKがgpg-agentを指していることを確認します。

説明:

デフォルトでは、gpg-agentはSSHエージェントを有効にしません。これは、コマンドラインで--enable-ssh-supportを渡すか、上記のように構成ファイルに行を追加することによって行われます。

第二に、他のSSHエージェントの問題。 OpenSSHエージェントはデフォルトで起動し、x11-commonパッケージから/etc/X11/Xsession.d/90x11-common_ssh-agentによってセットアップされます。 GNOMEを実行している場合は、GNOMEキーリングエージェントも実行されています。これらは両方ともGnuPGエージェントに干渉します。

OpenSSHエージェントを無効にするには、上記のように/etc/X11/Xsession.optionsを編集します。

GNOMEキーリングエージェントを無効にすることは、潜在的にもう少し複雑です。 Xfceを使用して、libpam-gnome-keyringパッケージをアンインストールし、XfceがGNOMEサービスを開始しないようにすることができます(設定→セッションと起動→詳細→起動時にGNOMEサービスを起動します–チェックされている場合はチェックを外します)。

トラブルシューティング

それでもこのSSH_AUTH_SOCKがgpg-agentを指していない場合は、別のエージェントがGnuPGエージェントに干渉している可能性があります。 SSH_AGENT_PID変数には、エージェントプロセスのPIDが含まれている必要があります。これは、そのエージェントを特定するのに役立ちます。

ソース: My Perfect GnuPG/SSH Agent Setup

1
harrymc

スクリプトを/etc/profile.dに配置します。実行可能ビットセット(chmod +x)と、ファイルの拡張子が.shであることを確認してください。

0
NOLFXceptMe