xubuntu: остановите gnome-keyring-daemon от олицетворения ssh-agent

Я хочу использовать реальный ssh-агент вместо gnome-keyring в xubuntu. Я следовал инструкциям из http://dtek.net/blog/how-stop-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204, но брелок для ключей gnome по-прежнему регистрируется как ssh-agent. Я все еще хочу продолжать использовать gnome-keyring для других паролей

5 ответов

Оказывается, если в xfce включена совместимость с gnome, xfce4-session безоговорочно запустит gnome-keyring-daemon. Это жестко закодировано, на данный момент нет способа настроить это. Отключение режима совместимости с GNOME приводит к тому, что брелок не запускается при входе в систему, и вам потребуется снова ввести пароль, если вы его запустите.

Кажется, самое простое решение - перехватить вызов gnome-keyring-daemon и вставить скрипт, который вставит --components флаг в аргументах, чтобы запретить gnome 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 keyring больше не будет пытаться заменить ssh-add.

Обратите внимание, что при обновлении системы будет восстановлен gnome-keyring-daemon по умолчанию, поэтому вам, вероятно, придется выполнить описанные выше действия еще раз после обновления.

редактировать:

В xubuntu 14.10 автозагрузка работает немного иначе, так как gkd также запускается из старта сессии. Можно переопределить конфигурацию upstart, чтобы не запускать компонент ssh, но даже в этом случае gkd запустит свой компонент ssh, когда xfce4-session также попытается запустить его. Так что если вы хотите, чтобы xfce также автоматически запускал сервисы gnome, вам все равно понадобится вышеуказанный хак. Альтернативой является отключение сервисов gnome (Настройки -> Сеанс и запуск -> Дополнительно -> Запуск сервисов GNOME при запуске), настройка upstart для запуска gkd с помощью --components=pkcs11,secrets,gpg пометить, а также дополнительно настроить службы gnome, которые вы хотите запускать вручную.

(Помимо двух мест, где запускается gkd, упомянутых выше, gk-daemon также запускается до этого из lightdm/PAM для получения пароля для входа пользователя в систему. Но этот запуск не полностью настраивает gkd, и он все еще ожидает, что он будет полностью настроен второй попыткой запустить его, чтобы попытка запуска не имела отношения к текущей проблеме.)

Это старая ветка, но мой способ решения этой проблемы на Xubuntu 14.04 прост, просто возродившись gnome-keyring-daemon на сессию и запуск. Что вам нужно сделать, это просто запустить команду ниже:

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

Мы удаляем "ssh" из компонента набора ключей Gnome.

  1. Перейдите в Меню> Настройки> Сеанс и запуск
  2. Нажмите вкладку Автозапуск приложения
  3. Нажмите кнопку Добавить
  4. Появится новое окно приложения, вы можете заполнить его, как пример ниже
    1. Название: SSH Keyring Remover
    2. Описание: Удалить SSH из GNOME Keyring
    3. Команда: gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
  5. Нажмите ОК

Попробуйте выйти из сеанса XFCE и войти обратно. Чтобы убедиться, что Gnome keyring больше не управляет ssh, просто запустите.

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

Если вы получили это сообщение, значит, Gnome keyring не управляет вашим SSH, и вы можете использовать оригинальную реализацию OpenSSH ssh-agent.

Я только что столкнулся с этой проблемой на 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 не смог подключиться к gpg-agent из-за $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, поэтому решение требует двух шагов. Сначала перейдите к 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 если вы их тоже создали, так как они были только для отладки.

To build on the answer by @JanKanis, I traced it down to xfce4-session being the culprit for initiating the gnome-keyring-daemon --start command.

When run that way gnome-keyring-daemon does not check for SSH_AUTH_SOCK already being set, which is a "feature", since you then can have both ssh-agent and gnome-keyring-daemon providing a socket.

Перво-наперво:

добавлять ~/.config/upstart/gnome-keyring.conf:

description "GNOME Keyring agents"
author "Dimitri John Ledkov <xnox@ubuntu.com>"

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

Now replace gnome-keyring-daemon with a wrapper (I moved the original to /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
Другие вопросы по тегам