Я хочу использовать реальный ssh-agent вместо gnome-keyring в xubuntu. Я следовал инструкциям из http://dtek.net/blog/how-stop-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204 , но брелок гнома по-прежнему регистрируется как ssh- агент. Я все еще хочу продолжать использовать gnome-keyring для других паролей
Оказывается, что если в 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 и его все еще ожидает, что он будет полностью сконфигурирован второй попыткой его запуска, так что попытка запуска не относится к текущей проблеме.)
Для построения на ответе @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-сессии для не вызывания гнома-демона брелока для ключей - запускается, который не имеет никаких других побочных эффектов. Они все делают предположения задницы о вещах установленными и таким образом идут вперед, читает мысли пользователя.
Это старая ветка, но мой способ решения этой проблемы в Xubuntu 14.04 прост, просто возродив gnome-keyring-daemon
в сеансе и запуске. Что вам нужно сделать, это просто запустить команду ниже:
$ gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
Мы удаляем «ssh» из компонента Gnome keyring.
gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
Попробуйте выйти из сеанса XFCE и снова войти в систему. Чтобы убедиться, что Gnome keyring больше не управляет ssh, просто запустите.
$ ssh-add -l
Could not open a connection to your authentication agent.
Если вы получили это сообщение, значит, набор ключей Gnome не управляет вашим SSH, и вы можете использовать оригинальную реализацию OpenSSH ssh-agent.
Вот менее инвазивная версия сценария, опубликованная 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 не смог подключиться к 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
, если вы их тоже создали, так как они были только для отладки.