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 для других паролей

6
задан 08.05.2020, 02:02

5 ответов

Вот менее инвазивная версия сценария, опубликованная 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
ответ дан 08.05.2020, 02:02
  • 1
    Если нет никакого --components, флаг передал, я думаю, что гном-демон брелока для ключей только запустит все компоненты, так в этом случае этот сценарий doesn' t работа. Я думаю, что xfce4-сессия будет иногда делать это (возможно, в зависимости от конфигурации). – Tarek Eldeeb 08.05.2020, 02:03
  • 2
    Я думаю you' право ре, поскольку у меня все еще есть это всплывающее окно на начальной загрузке, несмотря на мою обертку. Если я уничтожу его и позволю другому приложению перезапустить его (как Хром), то это будет вести себя само до перезагрузки... I' ll, возможно, экспериментируют и видят, могу ли я улучшиться. – Steve 08.05.2020, 02:03

Чтобы развить ответ @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 <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

Теперь замените 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 [111] $@" >> ${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
ответ дан 08.05.2020, 02:03

Это старая ветка, но мой способ решения этой проблемы в 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.

3
ответ дан 08.05.2020, 02:04
  • 1
    Что это делает к $SSH_AUTH_SOCK, который первоначально установил тот гном-демон брелока для ключей? Я ожидал бы, что это остается установленным в среде и указывает на несуществующий сокет (ssh-добавить сообщение, кажется, соглашается). Раз так это не позволяет кому-то автоматически выполнять исходный ssh агент еще без некоторых модификаций. – Phrogz 08.05.2020, 02:04
  • 2
    @JanKanis Никакая потребность волноваться, когда Вы выполняете исходный ssh-агент, это заменит $SSH_AUTH_SOCK автоматически так вместо того, чтобы использовать исходное значение брелока для ключей Gnome, это будет использовать новый. Я имею, записал настраиваемое решение заменить гнома-демона брелока для ключей, использующего исходный ssh-агент notes.rioastamal.net/2016/06/… – Minh Nguyen 08.05.2020, 02:04

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

2
ответ дан 08.05.2020, 02:04
  • 1
    Обратите внимание, что можно просмотреть process' среда путем выполнения cat /proc/<PID>/environ | tr \\0 \\n. Используйте pstree для наблюдения дерева процесса. – Andro Selva 08.05.2020, 02:05
  • 2
    Не плохая идея для отладки подобных вещей в будущем. Спасибо за предложение. – Hevski 08.05.2020, 02:05

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

5
ответ дан 08.05.2020, 02:05
  • 1
    Я can' t полагают, что я должен был обратиться к этому ужасному взлому для совершения такого выбора, it' s ужасный, но был похож на единственный путь. – Phrogz 08.05.2020, 02:06

Теги

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