Как автоматически добавить защищенный ключ в ssh-agent при запуске?

5978
matthias krull

Я использую GDM для запуска WME через .xinitrc. Мне нравится потрясающее удобство использования и целостность гномов, и до сих пор большинство программ запуска работают нормально, но я борюсь с ssh-agent. Когда я запускаю gnome, мой защищенный паролем id_rsa автоматически добавляется в ssh-agent при запуске .. Я пытаюсь добиться того же самого с моим .xinitrc, запущенным awesome wm.

Мой .xinitrc:

/usr/libexec/at-spi-registryd & /usr/libexec/gdu-notification-daemon & gnome-screensaver & /usr/libexec/vino-server --sm-disable & /usr/bin/gnome-keyring-daemon --start --components=keyring & /usr/bin/gnome-keyring-daemon --start --components=secrets & /usr/bin/gnome-keyring-daemon --start --components=ssh & /usr/bin/gnome-keyring-daemon --start --components=pkcs11 & /usr/bin/gnome-keyring-daemon --start --components=gpg & /usr/libexec/polkit-gnome-authentication-agent-1 & /usr/libexec/evolution/2.32/evolution-alarm-notify & /usr/libexec/gnome-settings-daemon & gnome-power-manager & gsettings-data-convert & gnome-volume-control-applet & nm-applet --sm-disable & exec /usr/bin/ck-launch-session /usr/bin/dbus-launch --exit-with-session /usr/bin/ssh-agent -- awesome 

Как Гном справляется с этим?

3

2 ответа на вопрос

6
grawity

GNOME хранит ваши ключевые пароли SSH в кольце ключей GNOME, которое ( loginсвязка ключей) разблокируется паролем для входа в систему с помощьюpam_gnome_keyring :

#%PAM-1.0 auth ... auth ... auth optional pam_gnome_keyring.so  session ... session ... session optional pam_gnome_keyring.so auto_start 

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

eval $(gnome-keyring-daemon --start) 

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

Еще одна вещь: Многие демоны должны быть запущены в виде ConsoleKit сессии - агента аутентификации PolicyKit, например. Вам повезет больше, если вы замените весь ~/.xinitrcскрипт на:

exec ck-launch-session dbus-launch --exit-with-session ~/.xinitrc-session 

затем используйте ~/.xinitrc-sessionдля запуска остальной части GNOME.


Вы можете пойти более легким путем. Используйте стандарт ck-launch-session dbus-launch --exit-with-session gnome-sessionи просто скажите менеджеру сессий GNOME, чтобы он запускал Awesome в качестве оконного менеджера. Следуйте официальным инструкциям.

Сокращенная форма для GNOME 2:

mkdir -p ~/.local/share/applications/ cp /usr/share/applications/awesome.desktop ~/.local/share/applications/ cat >> ~/.local/share/applications/awesome.desktop X-GNOME-WMName=Awesome X-GNOME-WMSettingsModule=awesome X-GNOME-Autostart-Phase=WindowManager;Panel X-GNOME-Provides=windowmanager;panel X-GNOME-Autostart-Notify=true [Ctrl-D] gconftool-2 --set /desktop/gnome/session/required_components/windowmanager --type string awesome 
Очень хороший ответ. Все ли так же работает в Gnome 2 и 3? Benjamin Bannier 13 лет назад 0
@honk: GNOME 3 использует ту же связку ключей (первая часть), но обрабатывает материал сессии (вторая часть) несколько иначе. На удивительной вики-странице есть инструкции для обоих. grawity 13 лет назад 0
как оказалось, ssh-agent запускается gdm до запуска .xinitrc. `eval $ (gnome-keyring-daemon --start)` перед выполнением awesome сделал свое дело, так что действительно там, где отсутствуют только переменные окружения. спасибо, что подтолкнул меня в правильном направлении. matthias krull 13 лет назад 0
@Mugen: Я надеюсь, что вы прочитали весь пост, а не только первый ⅓. grawity 13 лет назад 0
Конечно я сделал. Использование awesome в качестве оконного менеджера Gnome обычно работало с инструкциями из удивительной вики, но не в последнее время. .xinitrc выполняется через `/ usr / bin / dbus-launch - exit-with-session / usr / bin / ssh-agent - / etc / X11 / gdm / Xsession custom`. Итак, сеанс DBus и ssh-agent уже запущены. Для работы зависимых от consolekit программ, таких как nm-applet, мне не нужно было ничего делать, кроме как запускать awesome в сеансе консоли. Переменные среды действительно были недостающей частью. matthias krull 13 лет назад 1
2
lkraav

Есть ли какая-то особая причина не использовать pam_ssh ? Я нахожу это довольно удобным.

У меня все работает с программным обеспечением, которое все равно используется как зависимость. В итоге пропала ни одна строка. Таким образом, не было никакой причины использовать другое программное обеспечение. Но спасибо, что упомянули об этом, я обязательно более внимательно посмотрю на это. matthias krull 13 лет назад 0
В прошлый раз, когда я использовал pam_ssh, он потерпел крах при попытке импортировать ключ ECDSA, и я не смог войти в систему. (Следует признать, что gnome-keyring также не поддерживает его, но, по крайней мере, он терпит неудачу изящно.) grawity 12 лет назад 1

Похожие вопросы