xセッションなしのgnome-keyringの使用


13

私のユースケースは、ソフトウェア開発が実行されるヘッドレスサーバーがあることです。通常、SSH接続のX11転送を有効にしますが、接続が遅い遠隔地では使用できません。
定期的にツリー内の18〜20のリポジトリで作業するため、git資格情報の安全なストレージとキャッシュが必要です。そのため、git-credential-gnome-keyringをgit credential.helperとして使用し、libgnome-keyringを使用して通信しますgnome-keyring-daemonへ。ソリューションをテストするために、モニター付きのPCをセットアップし、システムでデフォルトでキーリングが機能することを確認してから、SSHで試してみました。X11転送で動作しますが、それなしでは動作しません。

X11転送なしで接続している場合、キーリングを照会すると次のエラーが発生し、ツールはコマンドラインでのプロンプトにフォールバックします。

** (process:18305): CRITICAL **: Error communicating with gnome-keyring-daemon

調査の結果、基本的な問題は、gnome-keyring-daemonが接続にdbusを使用して通信することを期待していることです。X11セッションがない場合、dbusは開始されないため、gnome-keyring-daemonとlibgnome-keyringが接続するための一般的なdbusバスはありません。

他の人がこの問題に投稿した2つの解決策を見つけましたが、どちらも私にはうまくいきません。

  1. X11を使用する既存のセッションからDBUSポートを取得します
  2. 新しい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-セッション/

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

セッションのDBUSを手動で起動する2番目の方法では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-in-an-ssh-session

アップグレードの場合に変更を失うことなく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)であるかデーモンであるかは不明です。

これをどのように機能させるのですか?


実際、x11転送を使用する場合、リモートキーリングではなくローカルキーリングを使用している場合も、ユーザーキーリング(デーモン)の前にdbusセッションを開始する必要があります
...-intika

最初のアプローチが示したように、キーリングデーモンが開始される前にdbusセッションを開始しました。そして、リモートシステムでgnome-key-ringデーモンを使用するコマンドを実行すると、$ DISPLAYソケットを介してソースシステムに接続し、そこにあるdbusセッションに接続しますか?それは非常にありそうにないようですが、私はそれについて完全に同意するのに十分なことを知りません。Dbusはグラフィカルツールではなく、グラフィカルアプリケーションでよく使用されるプロセス間通信ツールです。
mtalexan

ここでつばを吐くだけですが、xvfbを使用してxsessionを「偽造」してみましたか。
Xserver

回答:


0

これは馬鹿げた答えかもしれませんが、少なくともマスターキーの入力を求めるには、gnome-keyring X11セッションにアクセスする必要があります。それで、設計上、実行させることは不可能です...そうではありませんか?

編集:たぶんそれ不可能ではありません。この投稿を参照してください、あなたの問題に似ています:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.