Почему я не могу взаимодействовать с моим ssh-агентом? (например, ssh-add -D не работает)

7

В моей системе Kubuntu 14.04 я пытаюсь управлять ключами с помощью моего агента SSH, но почему-то он игнорирует мои команды ssh-add . Посмотрите на это ниже, и вы поймете, что я имею в виду.

  1. Перечислите текущие клавиши

    ⟫ ssh-add -l
    2048 60:6f:58:ef:7c:b0:ec:94:fb:fa:59:21:86:3d:fc:4c [email protected] (RSA)
    

    Этот ключ загружается во время загрузки, но я ожидал некоторый ключ ECDSA, а не RSA. Я не знаю этого ключа ...

  2. Удалите ключ из агента.

    ⟫ ssh-add -D
    All identities removed.
    

    уеу! Но ... это?

    ⟫ ssh-add -l
    2048 60:6f:58:ef:7c:b0:ec:94:fb:fa:59:21:86:3d:fc:4c [email protected] (RSA)
    

    Что, черт возьми? Это просто для меня.

  3. Что здесь происходит?

    ⟫ env | grep -i ssh
    SSH_AUTH_SOCK=/run/user/1000/keyring-eDJggO/ssh
    

    Посмотрим, какой процесс запускает этот сокет.

    ⟫ sudo fuser -u /run/user/1000/keyring-eDJggO/ssh
    [sudo] password for gert: 
    /run/user/1000/keyring-eDJggO/ssh:  9434(gert)
    ⟫ ps -p 9434 u
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    gert      9434  0.0  0.0 292528  7192 ?        Sl   00:05   0:00 gnome-keyring-daemon [...]
    

    Что, черт возьми, делает GNOME в моей KDE-системе? Не должен ли кошелек KDE быть моим агентом SSH?

Это приводит к большему количеству вопросов, чем ответов, и я остаюсь с нефункциональным ssh-agent.

В другой системе я не наблюдаю этого поведения, и я не могу найти разницу в конфигурации. Оба имеют только KDE и установленные пакеты почти идентичны (управляются Puppet).

    
задан gertvdijk 24.12.2014 в 00:13
источник

3 ответа

6

ПРИМЕЧАНИЕ. Это не ответ, решающий проблему с корнем. Пожалуйста, предоставьте новый ответ, если вы считаете, что можете решить основную причину. Вы действительно должны прочитать, почему мое решение - всего лишь уродливый взлом.

Вот объяснение того, что происходит во время загрузки, идентифицируя виновника.

Используя KDM (или LightDM) в качестве менеджера входа в систему, для входа в систему создается X-сеанс. Диспетчер регистрации позволяет вам выбрать X-сеанс (например, GNOME, KDE Plasma и т. д.) на основе доступных в вашей системе. Каталог /usr/share/xsessions содержит файлы для каждой установленной среды рабочего стола, а ваш пользовательский выбор сохраняется в ~/.dmrc .

В то время как среда рабочего стола загружается после входа в систему, она загружает все скрипты в /etc/X11/Xsession.d/ . В системе Kubuntu 14.04 я вижу /etc/X11/Xsession.d/90x11-common_ssh-agent по умолчанию, инициализируя агента SSH. Как и ожидалось. Отлично!

На практике, однако, мы видим разные вещи. Откуда возникает gnome-keyring-daemon и почему обычный ssh-agent не запущен? Ну, клавиша GNOME запускается двумя способами:

  • Автозапуск XDG, в /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • В качестве Upstart задания сеанса в /usr/share/upstart/sessions/gnome-keyring.conf

Все сценарии сначала проверяют значения среды, будут ли они продолжены. Например.

[ -z "$SSH_AUTH_SOCK" ] || [ -z "$GPG_AGENT_INFO" ] || { stop; exit 0; }

Это делает это своего рода состояние гонки, на котором SSH-агент фактически запущен. Первый побеждает. Скоба для более неприятных бит.

Как получается, что он работает на одном компьютере надежно и не надежно в другом? Задания для запуска X-сеанса запускаются только тогда, когда переменная среды DESKTOP_SESSION указана для нее в /etc/upstart-xsessions , обработанной /etc/X11/Xsession.d/00upstart . KDM позволяет установить рабочую среду «По умолчанию» ( default в ~/.dmrc ), эффективно kde-plasma , но не отображается kde-plasma .

С Session=kde-plasma :

⟫ echo $DESKTOP_SESSION
kde-plasma

С Session=default в рабочем столе KDE Plasma:

⟫ echo $DESKTOP_SESSION
default

Это неправильно. И теперь вы можете догадаться, почему он не выполняет проверку белого списка против /etc/upstart-xsessions .

Быстрое исправление для запуска сеанса терминала

killall gnome-keyring-daemon && eval 'ssh-agent'

Заключение

Похоже, что можно ударить по ошибке, когда все задания сеанса Upstart не запускаются вообще. Другая ошибка препятствует правильному взаимодействию с агентом SSH с ключом GNOME (или ssh-add должно жаловаться и терпеть неудачу). О, я тебя ненавижу, ошибки.

Как только я нахожу время, чтобы провести какое-то исследование того, что именно должно делать, я напишу отчеты об ошибках.

На данный момент я решил просто «использовать» ошибку Upstart и предотвратить выполнение заданий сеанса Upstart, установив Session=default . Я не уверен, насколько это ломается, но до сих пор я не видел, чтобы что-то разваливалось.

Коренной причиной является появление в основном GNOME-брелка и которое не должно лежать мне и не предлагать неправильные ключи.

    
ответ дан gertvdijk 24.12.2014 в 00:13
2

Я всегда заканчиваю sudo apt-get remove --purge gnome-keyring , после чего следует перезапуск. ubuntu-sso зависит от этого, но я не использую это, поэтому не беспокойтесь.

ssh-agent, похоже, работает так, как должен после.

    
ответ дан kaleissin 26.12.2014 в 19:45
1

Я понимаю, что это старая нить. Я использую xubuntu 16.04. Кажется, ошибка все еще там. Я установил seahorse для управления ключами, и это сработало.

    
ответ дан VGR 20.09.2017 в 20:33