私の使用例は、ソフトウェア開発を実行するためのヘッドレスサーバーがあることです。私は通常、SSH接続へのX11転送を有効にしますが、接続が遅いリモートの場所では有効にしません。
ツリー内の18-20個のリポジトリで頻繁に作業するため、git資格情報を安全に保存してキャッシュする必要があるため、libgnome-keyringを使用してgnome -keyringと通信するgit credential.helperとしてgit-credential-gnome-keyringを使用します。 -悪魔。ソリューションをテストするためにモニター付きのPCをセットアップし、システムがデフォルトでキーリングが機能していることを確認した後、SSHを使用して試しました。 X11転送と連携して動作しますが、X11転送なしでは動作しません。
X11転送なしで接続すると、キーリングを照会すると次のエラーが発生し、ツールはコマンドラインにメッセージを再表示します。
** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon
調査の結果、根本的な問題は、gnome-keyring-daemonが通信にdbusを使用する接続を期待していたことを示しました。 X11 セッションがないと dbus は開始されないため、gnome-keyring-daemon と libgnome-keyring に接続する共通の dbus バスはありません。
私はこの問題について他の人が投稿した2つの解決策を見つけましたが、どちらも私には役に立ちませんでした。
- X11を使用して既存のセッションからDBUSポートを取得する
- 新しいDBUSポートを手動で起動
既存のDBUSポートに接続するときに、既存のログインセッションのPIDを見つけて、procfsからそのPIDの環境をダンプして検索し、現在のDBUS_SESSION_BUS_ADDRESS
環境にエクスポートするのが基本概念です。これはセッション内のすべてのエントリで使用されているDBUSバスを公開するために使用される変数であるため、この変数を設定すると、そのバスが他のセッションに関連付けられているバスであっても、セッション内のすべてのエントリが共通のDBUSバスで通信できる必要があります。
ソースはこちら:
https://ubuntuforums.org/showthread.php?t=1059023
https://ask.fedoraproject.org/en/question/45246/error-communicating-with-gnome-keyring-daemon-in-ssh-session/
SSHログイン時に実行されるコードが.bashrcに追加されました。
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
local myPID=`pgrep "(.*session|fluxbox)" | head -n1`
if [ -n "$myPID" ] ; then
local myVar=`cat /proc/${myPID}/environ | grep -z "^DBUS_SESSION_BUS_ADDRESS=" | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
if [ -n "$myVar" ] ; then
export DBUS_SESSION_BUS_ADDRESS=$myVar
fi
fi
fi
2番目の方法は、セッションに対してDBUSを手動で開始することです。これはdbus-launch
新しいセッションを作成し、環境を設定し、必要なすべてのDBUS_SESSION_BUS_ADDRESS
サービスでgnome-keyring-daemonを起動し、空のアドレスではなく作成したDBUSバスアドレスを表示するようにします。バスアドレス。このソリューションは、システムごとに1つではなくセッションごとに1つのインスタンスを実行するためにgnome-keyring-daemonを変更する必要があるかもしれませんが、そうではないかもしれませんが、まだ明確ではありません。
源泉:
8番から始まる:https://support.wandisco.com/index.php?/Knowledgebase/Article/View/362/17/how-to-setup-encrypted-svn-password-storage-using-gnome-keyring- SSHセッションで
アップグレード中に変更を失うことなくdbusサービスの「Exec」行を変更する方法
SSHログイン時に実行されるコードが.bashrcに追加されました。
# then DBUS wasn't started for this session and needs to be
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
# start a new dbus session and make sure the variables are exported (automatic output)
eval `dbus-launch --sh-syntax`
# make sure gnome-keyring-daemon is using all the necessary components (it may not be by default)
# Capture the output, which is a series of variable setting commands, one on eachline, and
# export them while setting them
while read -r LINE
do
export $LINE
done <<< $(gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh)
fi
どちらのソリューションも同じ失敗結果を提供します。 gnome-keyring-daemonが通信できないというエラーをただちに生成するのではなく、プロセスがしばらく中断された後に次の出力を生成します。
Gkr-Message: secret service operation failed: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
** (process:31155): CRITICAL **: Error communicating with gnome-keyring-daemon
gnome-keyring-daemonがDBUSとどのようにやり取りするかはわかりませんが、2番目のエラー結果セットを見ると、新しく作成されたDBUSバスまたは他のDBUSバスのプロセスを介してアクセスできないことが明らかになりました。私が見つけたいくつかのコンテンツでは、gnome-keyring-daemonを使用する前にDBUSを起動する必要があるかもしれませんが、使用法(libgnome-keyring)かこれがデーモンの場合であるかどうかはわかりません。
どのように動作させることができますか?
答え1
愚かな答えかもしれませんが…GNOMEキーリング必要X11 セッションにアクセスすると、少なくともマスターキーの入力を求められます。したがって、設計上動作させることはできません。そうではありませんか?
編集:たぶんそうではないかもしれませんそれ不可能。これを見て郵便はがき、あなたの質問に似ています。