ssh-agent не настроен (SSH_AUTH_SOCK, SSH_AGENT_PID env vars не установлены)


13

Я создал новую учетную запись для друга на Kubuntu 12.04. Когда он использует, sshон получает эту ошибку:

Не удалось открыть соединение с вашим агентом аутентификации

Мы работаем над sshнекоторыми скриптами bash.

Посмотрев вокруг множества вещей, которые могут привести к этой ошибке, я наткнулся на это решение:

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

Затем он может запускать sshкоманды (и скрипты bash), как и ожидалось.

Перед выполнением этих двух команд переменные env не устанавливаются в терминале:

$ echo $SSH_AGENT_PID

$ echo $SSH_AUTH_SOCK

$ 

После выполнения команд переменные env устанавливаются в соответствии с ожиданиями. Однако они не остаются установленными (например, в другой оболочке или после перезагрузки).

Я хочу знать, как настроить его компьютер, чтобы ему не нужно было запускать эти две команды для установки переменных env. Мне не нужно запускать их на моем компьютере (никогда). Пока что я не вижу, чем отличаются наши машины.

Я вижу эту информацию на странице руководства, но она не говорит мне, как Ubuntu обычно настраивает агент автоматически или что происходит на компьютере моего друга, так что это не работает для него.

Существует два основных способа настройки агента: во-первых, агент запускает новую подкоманду, в которую экспортируются некоторые переменные среды, например, ssh-agent xterm &. Во-вторых, агент печатает необходимые команды оболочки (может быть сгенерирован либо синтаксис sh (1), либо csh (1)), которые можно оценить в вызывающей оболочке, например, eval ssh-agent -sдля оболочек типа Борна, таких как sh (1) или ksh (1) и eval ssh-agent -cдля csh (1) и производных.

После установки acctи перезагрузки это вывод lastcomm:

ssh-agent         F    newuser __         0.12 secs Wed Aug  7 11:02
ssh-agent         F    newuser __         0.00 secs Wed Aug  7 20:34
ssh-agent         F    newuser __         0.02 secs Wed Aug  7 20:02
ssh-agent         F    newuser __         0.01 secs Thu Aug  8 12:39
ssh-agent         F    newuser __         0.02 secs Thu Aug  8 07:45

Со страницы руководства:

F - команда, выполненная после форка, но без следующего exec

Я не уверен, что это важно.


2
Под Ubuntu ssh-agentобычно запускается из /etc/X11/Xsession.d/90x11-common_ssh-agent. Это можно подавить, удалив use-ssh-agentиз /etc/X11/Xsession. Эти файлы правильны? Агент запущен и затем убит или никогда не запускался? (Установите acctи запустите lastcommпосле входа в систему, чтобы увидеть, какие программы были запущены.)
Жиль "ТАК - перестать быть злым"

@ Жиль, спасибо. Эти два файла идентичны на моей машине и его машине. У нас обоих есть X11/Xsession.options:use-ssh-agentи X11/Xsession.d/90x11-common_ssh-agent:SSHAGENT=/usr/bin/ssh-agent. Я постараюсь acctи lastcommдальше. Спасибо
MountainX

обновленный вопрос
MountainX

все еще ищу решение ...
MountainX

Пожалуйста, опубликуйте результаты lastcommдля полного сеанса, а не только для ssh-agentпроцесса. Дело в том, чтобы увидеть, в каком порядке запускаются различные программы.
Жиль "ТАК ... перестать быть злым"

Ответы:


0

Вы упомянули, что ваш пользователь входит ssh, а не локально. Таким образом, use-ssh-agentin /etc/X11/Xsession.options- это красная сельдь: она не будет выполняться в сеансах SSH, только при локальном входе в систему с графическим интерфейсом X11 (или при использовании некоторого виртуального сеанса X11, например, через VNC или RDP).

Вместо этого вы должны проверить, libpam-sshустановлен ли он в любой системе. Он может быть настроен для аутентификации пользователя с использованием парольных фраз SSH, но это не является обязательным, и вам необходимо специально разместить ключ ~/.ssh/login-keys.d/для этой функции.

Другая его функция, тем не менее, состоит в том, чтобы автоматически запускать агент SSH при любом сеансе входа в систему и автоматически добавлять закрытые ключи SSH к агенту, если их пароль совпадает с паролем для входа пользователя. Я думаю, что это может быть причиной различного поведения между вашими системами.


3

Для

$ eval `ssh-agent -s`

Конструкция для работы, когда она помещена в «сценарий запуска», ваш сеанс и, в конечном счете, терминал, в котором вы ожидаете среду, должны быть потомками ( forkи exec) этого сценария. Причина в том, что при оценке выходные данные ssh-agent -sустанавливают переменные окружения в вызове оболочкиeval . Форма там, они могут быть переданы, и они могут быть потеряны в пути.

Так что если ssh-agentсценарий A выполняется где-то во время входа в систему, но терминал B, в котором вы запускаете сценарий оболочки, не является потомком A, то вы не сможете увидеть среду в B.

Если вы ssh-agentзапустили как systemd --userслужбу, то вам, возможно, придется использовать вместо этого соглашение: не позволяйте ssh-agent указывать переменные, но используйте общие знания при запуске агента и при запуске сеанса. Например, моя ~/.config/systemd/user/ssh-agent.serviceвыглядит так:

[Unit]
Description=SSH agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

И по моему у ~/.profileменя есть линия

export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"

Обратите внимание, что %tв первом соответствует ${XDG_RUNTIME_DIR}во втором.

Примечание: я не рад этому!


1

Я нашел ответ здесь:

http://www.bernatchez.net/userauth.html

В Ubuntu утилите ssh-add не удается загрузить файлы сертификатов. Это происходит, когда агент реализован gnome-keyring. Исправление состоит в том, чтобы прекратить использование ssh-компонента gnome-keyring. Поскольку процесс инициализации фактически запускает истинного ssh-агента, а затем запускает gnome-keyring-ssh.desktop, который захватывает AUTH_SOCKET, чтобы принять его, мы можем вернуться к исходному ssh-agent, отключив gnome-keyring-ssh.desktop.

Отключить gnome-keyring-ssh.desktop:

cd /etc/xdg/autostart/
sudo emacs gnome-keyring-ssh.desktop

Добавьте следующую строку в файл рабочего стола и сохраните его, затем перезагрузите компьютер:

X-GNOME-Autostart-enabled=false

0

Вы упомянули, что

$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/some_id_rsa

работает по желанию. Поэтому вам просто нужно выполнить их в нужное время, в .bash_profile или .xsession. Добавьте отладочные операторы вроде, (date; env|sort) >> /tmp/logчтобы помочь вам точно понять, когда они выполняются.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.