私はGnome 3.36.3(Ubuntu 20.04.1)とGnuPG 2.2.19をSSHエージェントとして使用しています。
私のファイルでGnuPG SSHエージェントソケットを見つける場所をOpenSSHに伝えます~/.profile
。
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
これは端末ウィンドウでうまく機能します。リモートSSHサーバーに接続するたびにPINを入力するように求められます。
ただし、Nautilusを使用してリモートSFTPサーバーに接続しようとすると、「Unauthorized!」などのエラーメッセージが表示されます。または、ユーザー名とパスワードを入力するように求められます(もちろん、キーのみを使用しているため機能しません)。
手動による解決策として、pkill gvfsd
Nautilusが文句を言うビープ音を出した後、SFTP接続が期待どおりに機能することがわかりました。
だから明らかに重力による加速度ログインした後、私のGnuPG SSHエージェントが不明です。しかし、後で死んで再起動したら。
作成するにはどうすればよいですか?重力による加速度まず、手動で終了せずに私のGnuPG SSHエージェントを知ることはできますか?
答え1
要約:
sudo chmod +x /lib/systemd/user-environment-generators/90gpg-agent && reboot
長い間読みました:
Nautilusを使用してリモートの場所を開くと、gvfs-daemonはリモートシステムに接続し、そのファイルシステムをバックグラウンドでマウントします。
gvfsはsystemdによって管理されます。 systemdは、ユーザーが入力した内容に関係なく、自分の環境を管理しているようです~/.profile
。~/.bashrc
とにかく、セッションの後半、つまりbash端末ウィンドウが開いたときに、新しく起動したプロセスで環境設定を使用~/.profile
できますが、~/.bashrc
最初から使用することはできません。この部分がどのように機能するかはわかりませんが、結果は簡単に観察できます。
ログイン後すぐにgvfs-daemon.service環境を見ると、次のことがわかります。
# Get the PID of the running gvfsd
$ FIXME=$(systemctl --user show --property="MainPID" gvfs-daemon.service | grep -o '[0-9]*')
# Show the environment of the running gvfsd
$ tr "\0" "\n" < "/proc/${FIXME}/environ"
次のコマンドを使用すると、bashセッションと比較して環境がはるかに小さいことがわかりますenv
。さらに重要なのは、gvfsd プロセス環境に SSH_AUTH_SOCK 変数がないことです。
これで、bash端末でgvfsサービスを再起動し、環境をもう一度見てみましょう。
$ systemctl --user restart gvfs-daemon.service
$ FIXME=$(systemctl --user show --property="MainPID" gvfs-daemon.service | grep -o '[0-9]*')
$ tr "\0" "\n" < "/proc/${FIXME}/environ"
SSH_AUTH_SOCK変数があるので、gvfs-daemonが呼び出すSFTPクライアントはgpg-agent-socketをSSHエージェントとして使用し、Nautilusのリモートフォルダは期待どおりに動作します。
Debian GnuPGパッケージマネージャはどこにありますか?この問題を認識してシステム化されたユーザーエクスペリエンスジェネレータスクリプトを提供します。
/lib/systemd/user-environment-generators/90gpg-agent
。
ただし、スクリプトの実行可能ビットが設定されていないため、起動しない可能性があります。
実行可能にしてシステムを再起動した後、SFTP接続は最初から期待どおりに開かれました。
$ sudo chmod +x /lib/systemd/user-environment-generators/90gpg-agent
$ reboot
注:この問題を調査している間、システムの作業中に環境が変わり続けるため、何度も誤解を受けました。確実にするには、システム全体を再起動する必要があります。単にログアウトしてからGnomeセッションに再度ログインしても、すべてがシステム起動後と同じ状態にリセットされるわけではありません。