Используя ssh-agent с KDE?

Раньше у меня это работало, но по какой-то причине оно не работает в моей новой системе.

в .kde4/Autostart/ У меня есть символическая ссылка на ssh-agent 01-sshagent а затем простой скрипт под названием 02-sshkeys это выглядит так:

/usr/bin/ssh-add $(find $HOME/.ssh/keys -type f | egrep -v '\.pub$')

Кажется, проблема в том, что при запуске ssh-agent работает нормально, но KDE не удерживает вывод и не сохраняет его в среде, поэтому для каждого сеанса Konsole мне нужно запускать ps чтобы найти PID, а затем вручную введите:

SSH_AUTH_SOCK=/tmp/ssh-YtvdiEtW3065/agent.3065; export SSH_AUTH_SOCK;
SSH_AGENT_PID=<pidnumber>; export SSH_AGENT_PID;

... просто чтобы заставить его работать, и он работает... только в этом окне Konsole.

Я попытался удалить вышеупомянутую символическую ссылку и просто использовать скрипт ssh так:

/usr/bin/ssh-agent | sh
/usr/bin/ssh-add $(find $HOME/.ssh/keys -type f | egrep -v '\.pub$')

Но, тем не менее, переменные агента отсутствуют в сеансе, и мне никогда не предлагается ввести пароль для моих ключей.

Я явно что-то упускаю, но что это?

5 ответов

Решение

Мое простое решение - просто запустить один ssh-agent и всегда поддерживать его в рабочем состоянии. Вы можете убить его при выходе из системы, если вы действительно этого хотите. Ключ должен просто использовать фиксированный сокет. Добавьте ssh-agent -a /tmp/$USER.agent в скрипт автозапуска. Затем выполните "export SSH_AUTH_SOCK=/tmp/$USER.agent", а затем команду ssh-add. Кроме того, вы можете добавить этот экспорт в ваш.bashrc,.profile или другой скрипт входа в оболочку и всегда иметь доступ к агенту даже при использовании удаленного входа ssh.

Это старый вопрос, и, вероятно, он заслуживает обновленного ответа. У меня работает следующее (Fedora 31 / KDE).

  1. Настройте KWallet с кошельком по умолчанию (kdewallet) и с тем же паролем, что и ваш пароль для входа. Убедитесь, что он разблокируется при входе в систему. В Arch Wiki есть некоторая информация об этом; в моем случае мне пришлось раскомментировать некоторые строки в /etc/pam.d/sddm.
  2. Создайте свой SSH-ключ (ssh-keygen) с любым паролем, который вам нравится (поскольку вы собираетесь использовать менеджер паролей, он не должен быть запоминающимся).
  3. Обеспечить ssh-add и ksshaskpass установлены.
  4. Добавьте сценарий автозапуска, как показано ниже:
    $ cat $HOME/.config/autostart-scripts/ssh
    #!/bin/sh
    SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add </dev/null
    
    Делать chmod +xи запустить его один раз. Ksshaskpass должен спросить ваш пароль SSH. Скажите ему, чтобы он запомнил пароль (для этого используется KWallet). Запустите еще раз и обратите внимание, на этот раз он не спрашивает.

Так и должно быть.

Согласно моим наблюдениям цитата "почему-то не работает на моей новой системе" стоит:

  • при обновлении с Ubuntu 13.04 до 13.10 (новая версия KDE 4.11.5)
  • с оболочкой tcsh

Это происходит с моей любимой оболочкой во время вышеупомянутого обновления, по крайней мере, дважды. Любые другие оболочки работают нормально. Эта проблема имеет слишком скудное освещение в интернете из-за низкой популярности tcsh. Итак, одно из решений - это мигрировать в zsh. я делаю это

Я покопался глубже и нашел явную причину ошибки. ssh-agent запускается командой

eval $(ssh-agent)

в файле /usr/share/upstart/sessions/ssh-agent.conf от upstart. Во-первых, команда ssh-agent исполняется как есть и производит вывод, подобный следующему:

setenv SSH_AUTH_SOCK /tmp/ssh-7AWho81toBZZ/agent.13776;
setenv SSH_AGENT_PID 13783;
echo Agent pid 13783;

Во-вторых, этот вывод выполняется eval, и в случае csh мы видим:

/proc/self/fd/9: 1: eval: setenv: not found

в ~/.cache/upstart/ssh-agent.log. Эта ошибка происходит из-за того, что "SHELL выглядит как стиль csh" (см. Ssh-agent(1)).

Итак, краткий и исчерпывающий ответ:

  • добавить параметр -s к команде вызова ssh-agent (/usr/share/upstart/sessions/ssh-agent.conf):

    eval $ (ssh-agent -s)

  • или не используйте csh

Это старый вопрос, но я все равно оказался здесь в поисках решения.

По крайней мере, одна из проблем моего дистрибутива заключается в том, что если вы используете GDM, который представляет собой диспетчер отображения Gnome, он вообще не заботится о KDE/Plasma и не делает ничего, чтобы убедиться, что он запускается правильно со всеми утилитами настройки.

По крайней мере, для GDM вам нужно убедиться, что вы включили настройки, связанные с PAM.

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

Для первого файла, который вам нужно отредактировать, это/etc/pam.d/gdm-autologin

Внутри этого файла вам нужно будет добавить 1 строку под@include common-session

Добавьте эту строку под строкой кольца для ключей gnome.

      session optional        pam_kwallet5.so auto_start

Следующий файл, который вам нужно отредактировать:/etc/pam.d/gdm-password

Внутри этого файла вам нужно добавить 1 строку под@include common-auth

Добавьте эту строку под строку gnome keyring.so.

      auth   optional         pam_kwallet5.so

Это должно решить ваши проблемы со входом в систему, если вы используете Plasma.

Вероятно, вы могли бы просто включить эти вещи каким-то другим способом, но у меня это сработало в Ubuntu 22.04.

Надеюсь это поможет.

Я не сторонник обновления процесса запуска KDE. Я делаю следующее:

mkdir ~/.bashrc.d

Затем в нижней части.bashrc

      for BASHRCFILE in `ls .bashrc.d`; do
    . .bashrc.d/$BASHRCFILE
done;

Затем каждый раз, когда я перезагружаюсь, я запускаю это в терминале:

      eval `ssh-agent`
ssh-add
echo "export SSH_AGENT_PID=${SSH_AGENT_PID}; export SSH_AUTH_SOCK=${SSH_AUTH_SOCK}" > .bashrc.d/ssh-agent

Каждый раз, когда вы открываете новую оболочку, содержимое.bashrc.d/ssh-agentимпортироваться в среду оболочки. Это хороший способ внедрить переменные среды во все ваши оболочки.

Другие вопросы по тегам