Xubuntuでgnome-keyringの代わりに実際のssh-agentを使用したい。 http://dtek.net/blog/how-stop-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204 からの手順に従いましたが、gnome keyringはそれ自体をsshとして登録します-エージェント。私はまだ他のパスワードにgnome-keyringを使い続けたい
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回目の起動試行により、起動試行が現在の問題に関連しないようにします。)
古いスレッドですが、Xubuntu 14.04でのこの問題に対する私の回避策は、セッションとスタートアップでgnome-keyring-daemon
を再生成するだけで簡単です。あなたがする必要があるのは、以下のコマンドを単に実行することです:
$ gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
Gnomeキーリングのコンポーネントから「ssh」を削除します。
gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
XFCEセッションをログアウトして、ログインし直してください。 Gnomeキーリングがsshを管理しないようにするには、実行するだけです。
$ ssh-add -l
Could not open a connection to your authentication agent.
そのメッセージを受け取った場合は、GnomeキーリングがSSHを管理していないことを意味し、元のOpenSSH ssh-agent実装を自由に使用できます。
@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を呼び出さないようにするための文書化された設定方法を見つけることができません。これには他の副作用はありません。それらはすべて、インストールされているものについて想定しているため、ユーザーの心を読みます。
以下は、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
Xubuntu 16.04でこの問題に遭遇したばかりで、ssh-agent
とgpg-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-agent
とgpg-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
も作成した場合は削除できるようになりました。