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