systemdがリモートソケットを所有しているときにSSH経由でGPGプロキシ配信を使用する方法は?

systemdがリモートソケットを所有しているときにSSH経由でGPGプロキシ配信を使用する方法は?

私はこのガイドと答えに従おうとしています。

そしてそれをするために私が見つけることができる他のものは:

  • macOSからUbuntu 18.04へのSSH
  • gpg --decryptリモートシステムで実行できるようにローカルgpgエージェントを渡します。

リモートコンピュータの公開鍵を--export編集しました。--importリモートgpgは、にあるプロキシソケットと /run/user/1001/gnupg/S.gpg-agentにある追加のソケットについて報告します/run/user/1001/gnupg/S.gpg-agent.extra

しかしssh -v -R /run/user/1001/gnupg/S.gpg-agent:/Users/rasmus/.gnupg/S.gpg-agent.extra -l rasmus <remote-host>警告しよう

警告:リスニングパス/run/user/1001/gnupg/S.gpg-agentへのリモートポート転送に失敗しました。

これは、systemdがすでにリモートソケットを所有しているためです。

$ sudo journalctl -xe
Mar 11 15:06:21 pact-cube sshd[4972]: error: bind: Address already in use
Mar 11 15:06:21 pact-cube sshd[4972]: error: unix_listener: cannot bind to path: /run/user/1001/gnupg/S.gpg-agent

macOSからUbuntu 18.04にgpgエージェントを渡すにはどうすればよいですか?両方のシステムで必要なGPGとSSHのバージョンを使用してください。

ベストアンサー1

gpg配信機能を取得する最も簡単な方法は、まずsystemdにこれらのソケット干渉を停止するように指示することです。 sudo権限なしで現在のユーザーに対してリモート側で次のコマンドを実行すると、これを行うことができます。

systemctl --user 'disable' 'gpg-agent.socket'
systemctl --user 'disable' 'gpg-agent-extra.socket'
systemctl --user 'stop'    'gpg-agent.socket'
systemctl --user 'stop'    'gpg-agent-extra.socket'

不要な問題のあるコンポーネントを取り除いた後の次のステップは、コンセントを配置する場所を決定することです。実行すると簡単に完了しますgpgconf --list-dirs。 (これらのソケットディレクトリは次のようにハードコードされています。メインディレクトリ.c。 gnupgをパッチして再コンパイルしないと設定できません。 )

必要なのは、クライアントソケットがサーバーに渡され、誤動作する第三者がこれを維持することだけです。 SSH構成ブロックは、次のコマンドを実行して生成できます。 (update $remote)

remote='host.example.com'
local_sock=$( gpgconf --list-dirs | sed -n 's/agent-extra-socket://p' )
remote_sock=$( ssh $remote "gpgconf --list-dirs" | sed -n 's/agent-socket://p' )
echo "Host $remote\n  RemoteForward $remote_sock $local_sock"

通常、次のような結果が生成されます。 (数値uid:sは間違いなく異なる場合があります。)

Host host.example.com
  RemoteForward /run/user/1/gnupg/S.gpg-agent /run/user/2/gnupg/S.gpg-agent.extra

systemdが退去されても、これらのパーティーに表示される傾向がある別の招待されていないゲストがいます。これはリモートシステムのSSHエージェントです。私たちが望む唯一のものはローカルプロキシなので、リモートで実行されているプロキシを終了してソケット配信をブロックするのをやめる必要があります。

ssh $remote "pkill gpg-agent"

gpgプロキシ転送を有効にせずに使用しようとするたびに、最後の手順が必要になることがあります。ソケットが利用できないときにエラーメッセージで終了するようにgpg:s設定が更新されない限り、どのキーでも信頼できない愚かなリモートエージェントを起動しようとするものではありません。これは次の方法で行うことができます。

ssh $remote "echo 'no-autostart' >> .gnupg/gpg.conf"

要約すると、次のようにssh -v話す必要があります。リモート配信の成功...

おすすめ記事