Где gnome-keyring устанавливает $ SSH_AUTH_SOCK?

10

Я нахожусь в процессе избавления gnome-keyringкак агент SSH.

Вещи, которые я сделал

  • Искал в интернете часами.
  • Менял вещи и перезагружал, часто.
  • Наконец-то просто rm-ed все вещи автозапуска, связанные с SSH.

Последняя вещь волшебным образом сработала, так как там больше нет гнезда для агента:

/run/user/[uid]/keyring/ssh

проблема

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

Вопрос

Что устанавливает эту переменную и где это делается?

Ловушки

  • Я не спрашиваю, как я могу сбросить эту переменную на другое значение.
  • Я не спрашиваю, как я могу установить это значение для всей системы или в файле конфигурации оболочки.
  • Я не прошу некоторых заклинаний вуду-скриптов init-script, чтобы что-нибудь заморозить, установить, сбросить, сбросить или заменить.
  • Я не спрашиваю совета о том, как удалить это: мне все еще нужно это для моих паролей, и это, кажется, самый интегрированный и отточенный менеджер паролей в Gnome.

Я хочу, чтобы эта вещь была отключена, как и должно быть.

JohnW
источник
2
Удалить гном-брелок?
rudimeier
1
@rudimeier: Мне все еще нужен gnome-keyring для моих паролей, и, насколько я знаю, нет ничего более отточенного и интегрированного в Gnome.
JohnW
@rudimeier даже это, кажется, не помогает. Я попробовал это.
Андре Бори

Ответы:

8

Дайте угадаю - вы используете Wayland Я столкнулся с этой проблемой сегодня и решил поделиться решением.

Gnome-Session SSH_AUTH_SOCKпо какой-то причине имеет жестко запрограммированное переопределение для underland См. Следующий коммит: https://github.com/GNOME/gnome-session/commit/a8896ccad65583885735a04205351f48a42f29ae

Обходной путь? Установить переменную окружения , чтобы отключить это поведение: GSM_SKIP_SSH_AGENT_WORKAROUND=1. Это приводит к короткому замыканию кода настроек среды.

Для людей, которые находят это и пытаются настроить ssh-agent: В моем системном файле systemd для ssh-agent у меня есть следующая строка:

ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"

Полный файл выглядит так:

[Unit]
Description=SSH Agent
IgnoreOnIsolate=true

[Service]
Type=forking
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK
ExecStartPost=/usr/bin/bash -c "/usr/bin/systemctl --user set-environment SSH_AUTH_SOCK=$SSH_AUTH_SOCK GSM_SKIP_SSH_AGENT_WORKAROUND=1"

[Install]
WantedBy=default.target
ceezy
источник
Спасибо! В Ubuntu v17.10 Artful Aardvark, просто добавив export GSM_SKIP_SSH_AGENT_WORKAROUND=1мой ~ / .profile и перезагрузив, исправил мою конфигурацию, которая ранее работала на v17.04.
Стивен Недзельски
Кажется, это влияет не только на Вейланда, я сталкивался с этим при попытке использовать gnome-flashback + i3.
dragon788
Обратите внимание, что этот хак работает до Gnome 3.24 или старше ( wiki.archlinux.org/index.php/GNOME/… )
Пабло Олмос де Агилера C.
5

(Среда OP неизвестна, поэтому приведенные здесь пути указаны на моей машине с Ubuntu)

Где gnome-keyring устанавливает SSH_AUTH_SOCK?

Чтобы ответить на главный вопрос в заголовке, SSH_AUTH_SOCK устанавливается командой gnome-keyring /usr/share/upstart/sessions/gnome-keyring-ssh.confс помощью следующей команды:

initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK

Цитирование initctlруководства:

initctl set-env VARIABLE[=VALUE]

Добавляет или обновляет переменную в таблице рабочей среды. Переменные, установленные таким образом, будут применяться ко всем последующим процессам запуска задания.

-g, --global

Работа с глобальной таблицей рабочей среды и всеми существующими таблицами рабочей среды.

Откуда SSH_AUTH_SOCK?

Приведенная initctlвыше команда обусловлена ​​тем, что переменная окружения SSH_AUTH_SOCK уже существует. Итак, это ситуация с курицей и яйцом? Что это устанавливает?

SSH_AUTH_SOCK изначально устанавливается исходным ssh-agent, который запускается в самом начале сеанса X. Цитирование руководства:

Создается сокет домена UNIX, и имя этого сокета сохраняется в SSH_AUTH_SOCKпеременной среды. Сокет доступен только для текущего пользователя.

НО, что делает ssh-компонент gnome-keyring, это заменяет себя существующим ssh-agent. Поэтому он перезаписывает SSH_AUTH_SOCK своим собственным сокетом, /run/user/.../keyring-.../sshчтобы приложения общались с ним, а не с ssh-agent.

Как это отключить

Теперь давайте ответим на последнее предложение «Я хочу, чтобы эта штука была отключена». ОП хочет отключить перезапись SSH_AUTH_SOCK компонентом ssh в gnome-keyring. Они хотят вернуть «истинную» переменную SSH_AUTH_SOCK, изначально установленную ssh-agent.

Компонент ssh запускается с помощью того же сценария запуска, упомянутого выше ( /usr/share/upstart/sessions/gnome-keyring-ssh.conf), но с одним условием: строка X-GNOME-Autostart-enabled=falseне должна быть найдена ни в одном из этих файлов:

  • (общесистемный конф) /etc/xdg/autostart/gnome-keyring-ssh.desktop
  • (пользовательский конф) ~/.config/autostart/gnome-keyring-ssh.desktop

Поэтому, если вы хотите отключить его, все, что вам нужно сделать, это добавить строку X-GNOME-Autostart-enabled=falseв один из этих файлов, предпочтительно в папку HOME.

xhienne
источник
Я попытался отключить записи автозапуска для набора ключей Gnome, и кажется, что переменная все еще там, но указывает на несуществующий сокет (поэтому отключение набора ключей сработало, но переменная установлена ​​где-то еще). Я использую машину Archlinux, так что нет выскочки, и в systemd нет ничего очевидного, что могло бы установить переменную ..
Андре Бори
@ АндреБори Я не знаю ни Арка, ни systemd. Каково новое значение пути сокета? На моем macihne ssh-agent обычно устанавливает его в /tmp/ssh-XXX/agent.PID. Ssh-agent все еще находится в вашем списке процессов?
xhienne
Путь такой же, как в оригинальном вопросе. Там нет ни агентов SSH, ни работающих ключей.
Андре Бори
Этот ответ действительно старый, но я надеюсь, что вы мне тоже поможете unix.stackexchange.com/questions/422574/…
Ojs
3

https://wiki.archlinux.org/index.php/GNOME/Keyring#Disable_keyring_daemon_components

Если вы хотите запустить альтернативный агент SSH (например, ssh-agent или gpg-agent), вам необходимо отключить ssh-компонент GNOME Keyring. Чтобы сделать это локально для учетной записи:

mkdir ~/.config/autostart
cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/ &&
echo 'Hidden=true' >> ~/.config/autostart/gnome-keyring-ssh.desktop

Тогда выйдите.

Слегка отредактировано, удалив явно бесполезное использование printf

sourcejedi
источник
Это также работает для меня на Ubuntu 14.04.
Очки,
Это верно для 3.24 и новее.
Пабло Олмос де Агилера С.
0

Начиная с Gnome 3.18, сокет, кажется, хранится в ~/.cache/keyring-(some random string)/ssh

По-видимому, это устанавливается gnome-keyring-daemon.

Адам Бакстер
источник