xubuntu: запретить gnome-keyring-daemon выдавать себя за ssh-agent

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, но gnome keyring все еще регистрирует себя как ssh-agent. Я все еще хочу продолжать использовать gnome-keyring для других паролей

решение1

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

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

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

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

решение2

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

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

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

  1. Перейдите в Меню > Настройки > Сеанс и запуск.
  2. Нажмите вкладку «Автозапуск приложения».
  3. Нажмите кнопку «Добавить».
  4. Появится новое окно заявки, вы можете заполнить его, как показано в примере ниже.
    1. Имя: Удаление связки ключей SSH
    2. Описание: Удалить SSH из связки ключей GNOME
    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.

решение3

Основываясь на ответе @JanKanis, я выяснил, что виновником запуска команды gnome-keyring-daemon --start является xfce4-session.

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

решение4

Вот менее инвазивная версия скрипта, который опубликовал 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

Связанный контент