xubuntu: gnome-keyring-daemon が ssh-agent になりすますのを停止する

xubuntu: gnome-keyring-daemon が ssh-agent になりすますのを停止する

xubuntuでgnome-keyringの代わりに本物のssh-agentを使いたいです。以下の手順に従いました。http://dtek.net/blog/how-stop-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204しかし、gnome keyring は依然として ssh-agent として登録されます。他のパスワードには引き続き gnome-keyring を使い続けたいです。

答え1

xfce で gnome 互換性がオンになっている場合、xfce4-session は無条件に gnome-keyring-daemon を起動することが判明しました。これはハードコードされており、現時点ではこれを構成する方法はありません。gnome 互換性モードを無効にすると、ログイン時にキーリングが起動しなくなり、起動するときにパスワードを再度入力する必要があります。

最も簡単な解決策は、gnome-keyring-daemon への呼び出しをインターセプトし、--componentsgnome keyring が ssh-add を置き換えないようにフラグを引数に挿入するスクリプトを挿入することのようです。

gnome-keyring-daemon を移動するには、以下を実行します。

sudo mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-wrapped

新しいgnome-keyring-daemonを作成します

sudo nano /usr/bin/gnome-keyring-daemon

次のコンテンツを挿入します。

#!/bin/sh
exec /usr/bin/gnome-keyring-daemon-wrapped --components=pkcs11,secrets,gpg "$@"

新しい gnome-keyring-daemon を実行可能にしますsudo chmod +x /usr/bin/gnome-keyring-daemon

これで、gnome キーリングは ssh-add を置き換えようとしなくなります。

システムをアップグレードすると、デフォルトの gnome-keyring-daemon が復元されるため、アップグレード後に上記の手順を再度実行する必要があることに注意してください。

編集:

xubuntu 14.10 では、gkd もセッション upstart から起動されるという点で、起動の動作が若干異なります。upstart 構成をオーバーライドして ssh コンポーネントを起動しないようにすることは可能ですが、その場合でも、xfce4-session が起動しようとすると gkd は ssh コンポーネントを起動します。したがって、xfce で gnome サービスも自動的に起動するようにしたい場合は、上記のハックが必要になります。別の方法としては、gnome サービスを無効にし (設定 -> セッションと起動 -> 詳細 -> 起動時に GNOME サービスを起動)、upstart がフラグを使用して gkd を起動するように構成し--components=pkcs11,secrets,gpg、オプションで手動で起動する gnome サービスも構成します。

(上記の gkd を起動する 2 つの場所とは別に、gk-daemon は、ユーザーのログイン パスワードを受け取るために、それより前に lightdm/PAM からも起動されます。ただし、その起動では gkd が完全に構成されず、2 回目の起動試行で完全に構成されることが期待されるため、その起動試行は現在の問題とは関係ありません。)

答え2

これは古いスレッドですが、Xubuntu 14.04 でのこの問題の回避策は、gnome-keyring-daemonセッションとスタートアップで再生成するだけです。必要なのは、以下のコマンドを実行するだけです。

$ gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg

Gnome キーリングのコンポーネントから「ssh」を削除します。

  1. メニュー > 設定 > セッションと起動に進みます
  2. アプリケーションの自動起動タブをクリック
  3. 追加ボタンをクリック
  4. 新しい申請ウィンドウが表示されますので、以下の例のように入力してください。
    1. 名前: SSH キーリングリムーバー
    2. 説明: GNOME キーリングから SSH を削除する
    3. 指示:gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
  5. OKをクリック

XFCE セッションからログアウトして再度ログインしてみてください。Gnome キーリングが ssh を管理しないようにするには、次のコマンドを実行します。

$ ssh-add -l
Could not open a connection to your authentication agent.

このメッセージが表示された場合は、Gnome キーリングが SSH を管理していないことを意味し、元の OpenSSH ssh-agent 実装を自由に使用できます。

答え3

@JanKanis の回答に基づいて、gnome-keyring-daemon --start コマンドを開始した原因が xfce4-session であることにまで遡りました。

このように実行すると、gnome-keyring-daemon は SSH_AUTH_SOCK がすでに設定されているかどうかをチェックしません。これは「機能」であり、ssh-agent と gnome-keyring-daemon の両方がソケットを提供できるようになります。

まず最初に:

追加~/.config/upstart/gnome-keyring.conf

description "GNOME Keyring agents"
author "Dimitri John Ledkov <[email protected]>"

start on (starting xsession-init or starting ssh-agent or starting gpg-agent) and started dbus

task
script
    # Stop because I say so
    stop; exit 0
    eval "$(gnome-keyring-daemon --start)" >/dev/null
    initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK
    initctl set-env --global GPG_AGENT_INFO=$GPG_AGENT_INFO
end script

ここで、gnome-keyring-daemon をラッパーに置き換えます (オリジナルを /usr/libexec/ に移動しました)。

#!/bin/sh

gkd=/usr/libexec/gnome-keyring-daemon
debug=1
log=${XDG_CACHE_HOME:-"${HOME}/.cache"}/gkd.log

if [ ${debug} -gt 0 ]
then
    echo "================" >> ${log}
    echo "Invoked as $0 $@" >> ${log}
    echo "================" >> ${log}
    /usr/bin/pstree -lag >> ${log}
fi

case "$@" in
    *--start*)
        $gkd --components=pkcs11,secrets,gpg "$@"
        ;;
    *)
        $gkd "$@"
        ;;
esac
if [ ${debug} -gt 0 ]
then
    /usr/bin/pstree -lag  >> ${log}
fi

デバッグ コードは、動作が停止した理由を突き止めるためにあります。これらのプログラムにはどれもまともな構成方法がないため、コマンドをハッキングする以外に方法はありません。この場合、xfce4-session が gnome-keyring-daemon --start を呼び出さず、他の副作用がない構成方法を文書化したものを見つけることができません。それらはすべて、インストールされるものについて仮定を立て、ユーザーの考えを読み進めます。

答え4

以下は、JanKanis が投稿したスクリプトの、より侵襲性の低いバージョンです。渡されたコンポーネントはすべて受け入れますが、SSH コンポーネントは取り除きます。

#!/bin/bash

ARGS="$@"

COMPONENTS=""
if [[ $ARGS =~ \-\-components= ]]; then
    component_match_expression='(\-\-components=([0-9a-z,]+))'
    COMPONENTS=$(echo $ARGS | grep -oP "$component_match_expression")

    ARGS=$(echo $ARGS | sed -E "s/$component_match_expression//")

    COMPONENTS="--components=$(echo $COMPONENTS | grep -oP '(?<=\-\-components=)([0-9a-z,]+)' | sed -e 's/ssh//' -e 's/,,/,/')"
    if [ "$COMPONENTS" != "--components=" ]; then
        ARGS="$ARGS $COMPONENTS"
    else
        exit 0
    fi
fi

/usr/bin/gnome-keyring-daemon-wrapped $ARGS

関連情報