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

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

7
задан 30 January 2014 в 02:52

5 ответов

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

Простейшее решение, по-видимому, состоит в том, чтобы перехватить вызов gnome-keyring-daemon и вставить скрипт, который вставит флаг --components в аргументы, чтобы предотвратить замену ssh-add связкой ключей gnome.

Выполните следующее для перемещения 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 по умолчанию, поэтому вам, вероятно, придется выполнить описанные выше действия снова после обновления.

edit:

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

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

0
ответ дан 30 January 2014 в 02:52

Для построения на ответе @JanKanis я проследил его вниз до xfce4-сессии, являющейся преступником для инициирования, гном-демон брелока для ключей - запускает команду.

Когда выполнено тот дорожный гном-демон брелока для ключей не проверяет на SSH_AUTH_SOCK, уже устанавливаемый, который является "функцией", так как у Вас затем могут быть и ssh-агент и гном-демон брелока для ключей, обеспечивающий сокет.

Первые вещи сначала:

Добавить ~/.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

Теперь замените гнома-демона брелока для ключей оберткой (я переместил оригинал в/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-сессии для не вызывания гнома-демона брелока для ключей - запускается, который не имеет никаких других побочных эффектов. Они все делают предположения задницы о вещах установленными и таким образом идут вперед, читает мысли пользователя.

3
ответ дан 30 January 2014 в 02:52

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

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

Мы удаляем «ssh» из компонента Gnome keyring.

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

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

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

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

0
ответ дан 30 January 2014 в 02:52

Вот менее инвазивная версия сценария, опубликованная 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
0
ответ дан 30 January 2014 в 02:52

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

0
ответ дан 30 January 2014 в 02:52

Другие вопросы по тегам:

Похожие вопросы: