私はこのガイドと答えに従おうとしています。
- https://wiki.gnupg.org/AgentForwarding
- https://superuser.com/questions/161973/how-can-i-forward-a-gpg-key-via-ssh-agent
- https://gist.github.com/TimJDFletcher/85fafd023c81aabfad57454111c1564d
そしてそれをするために私が見つけることができる他のものは:
- 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
話す必要があります。リモート配信の成功...。
答え2
未使用のソケットファイルを削除します。
ssh mylinuxserver 'rm /run/user/1001/gnupg/S.gpg-agent'
次に接続します。
ssh -vvv mylinuxserver
これはすでにRemoteForward
存在していると仮定します~/.ssh/config
。
# File: ~/.ssh/config
[...]
Host mylinuxserver
HostName mylinuxserver.example.com
#RemoteForward <socket_on_remote_box> <extra_socket_on_local_box>
RemoteForward /run/user/1001/gnupg/S.gpg-agent /Users/rasmus/.gnupg/S.gpg-agent.extra
[...]
詳細出力には、次のような内容が表示されます。
debug1: remote forward success for: listen /run/user/1001/gnupg/S.gpg-agent:-2, \
connect /Users/rasmus/.gnupg/S.gpg-agent.extra:-2
その後、リモートシステムでgpg-agentを使用すると機能します。
毎回未使用のソケットファイルを削除したくない場合は、次のようにStreamLocalBindUnlink yes
サーバーに追加してください。/etc/ssh/sshd_config
https://wiki.gnupg.org/AgentForwarding
Fedora Linuxでこれを実行したい人は注意してください。ソケットの有効化が機能するには、Fedora Linuxワークステーションで2つのソケットを有効にする必要がありました。
systemctl --user enable gpg-agent.socket
systemctl --user enable gpg-agent-extra.socket
gpg-agent.service
その後、要求は次の2つのソケットによってトリガーされることを報告します。
$ systemctl --user status gpg-agent.service
○ gpg-agent.service - GnuPG cryptographic agent and passphrase cache
Loaded: loaded (/usr/lib/systemd/user/gpg-agent.service; static)
Active: inactive (dead)
TriggeredBy: ● gpg-agent-extra.socket
● gpg-agent.socket
Docs: man:gpg-agent(1)