web-dev-qa-db-ja.com

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として登録します-エージェント。私はまだ他のパスワードにgnome-keyringを使い続けたい

6
JanKanis

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

最も簡単な解決策は、gnome-keyring-daemonの呼び出しをインターセプトし、--componentsフラグを引数に挿入するスクリプトを挿入して、gnomeキーリングが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 "$@"

Sudo chmod +x /usr/bin/gnome-keyring-daemonを使用して、新しいgnome-keyring-daemonを実行可能にします。

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

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

編集:

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

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

5
JanKanis

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

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

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

  1. [メニュー]> [設定]> [セッションと起動]に移動します
  2. [アプリケーションの自動開始]タブをクリックします
  3. 追加ボタンをクリックします
  4. 新しいアプリケーションウィンドウが表示されます。下の例のように入力できます
    1. 名前:SSH Keyring Remover
    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
rioastamal

@JanKanisの回答を基に、xfce4-sessionがgnome-keyring-daemon --startコマンドを開始する原因になっていることを突き止めました。

そのように実行すると、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を呼び出さないようにするための文書化された設定方法を見つけることができません。これには他の副作用はありません。それらはすべて、インストールされているものについて想定しているため、ユーザーの心を読みます。

3
Melvyn Sopacua

以下は、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
2
SPoage

Xubuntu 16.04でこの問題に遭遇したばかりで、ssh-agentgpg-agentの両方が機能することも望んでいました。

まず、私はgnome-keyringを気にしなかったので、関連するパッケージをすべて削除しました。例えば。

Sudo dpkg -P libgnome-keyring-common libgnome-keyring0 libp11-kit-gnome-keyring libpam-gnome-keyring libgnomeui-0 python-gnome2 gir1.2-gnomekeyring-1.0 system-config-printer-gnome

この時点でssh-agentgpg-agentは両方とも正常に実行されていましたが、gpg-agentが設定されていないため、gpgは$GPG_AGENT_INFOに接続できませんでした。 /etc/X11/Xsession.d/90gpg-agentを見ると、最初は明らかに設定されているので、それは本当に奇妙です。設定を解除する必要があります。

犯人を見つけやすくするために、カスタムセッションファイルを作成しました。

$ cat /usr/share/xsessions/xsession.desktop 
[Desktop Entry]
Version=1.0
Name=Xsession
Exec=/etc/X11/Xsession
Icon=
Type=Application

次に、次のようなカスタム${HOME}/.xsessionファイルを作成して実行可能にしました。

#!/bin/sh

# DEBUG
echo "GPG_AGENT_INFO: ${GPG_AGENT_INFO}" > "${HOME}/GPG_AGENT_INFO"

# Defined by /etc/alternatives/x-session-manager
exec x-session-manager

ログアウトし、lightdmを再起動し、再度ログインして(「Xsession」セッションを選択した状態で)、${HOME}/GPG_AGENT_INFOを調べました。案の定、環境変数はまだ設定されていました。だから、それはXfce4がやっていた愚かなことでした。

突っついて、私は最終的にこれにつまずいた:

$ strings /usr/bin/xfce4-session | grep gpg
/startup/gpg-agent/enabled
gpg-agent
gpg-agent-info
GNOME compatibility is enabled and gnome-keyring-daemon is found on the system. Skipping gpg/ssh-agent startup.
gpg-agent is configured as SSH agent, but gpg-agent is disabled or not found
Failed to kill gpg-agent with pid %d
$

xfce4-sessionはおそらくgnome-keyring-daemonを起動しようとするときに変数を設定解除しているようであるため、ソリューションには2つのステップが必要です。まず、Applications -> Settings -> Session and Startup -> Advancedに移動し、Launch GNOME services on startupにチェックマークを付けます。次に、gnome-keyring-daemonという名前の実行可能ファイルを$PATHのどこかに次の内容で作成します。

#!/bin/sh
#
# This script exists to satisfy an XFCE4 check which prevents
# the GPG_AGENT_INFO environment variable getting unset.

ログアウトしてもう一度ログインすると、ソートされるはずです。また、デバッグ用であるため、/usr/share/xsessions/xsession.desktopおよび${HOME}/.xsessionも作成した場合は削除できるようになりました。

2
boltronics