Используя 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).
- Настройте KWallet с кошельком по умолчанию (
kdewallet
) и с тем же паролем, что и ваш пароль для входа. Убедитесь, что он разблокируется при входе в систему. В Arch Wiki есть некоторая информация об этом; в моем случае мне пришлось раскомментировать некоторые строки в/etc/pam.d/sddm
. - Создайте свой SSH-ключ (
ssh-keygen
) с любым паролем, который вам нравится (поскольку вы собираетесь использовать менеджер паролей, он не должен быть запоминающимся). - Обеспечить
ssh-add
иksshaskpass
установлены. - Добавьте сценарий автозапуска, как показано ниже:
Делать$ 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
импортироваться в среду оболочки. Это хороший способ внедрить переменные среды во все ваши оболочки.