Однажды у меня это работало, но по какой-то причине это не работает в моей новой системе.
в .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$')
Но все же переменные агента не находятся в сеансе, и мне никогда не предлагается ввести пароль для моих ключей.
Я явно чего-то упускаю, но что это?
Мое простое решение - просто запустить один ssh-агент и постоянно держать его в рабочем состоянии. Вы можете убить его при выходе из системы, если хотите. Главное - использовать фиксированную розетку. Добавьте ssh-agent -a /tmp/$USER.agent в сценарий автозапуска. Затем выполните «export SSH_AUTH_SOCK = / tmp / $ USER.agent», а затем ssh-add. Кроме того, вы можете добавить этот экспорт в свой .bashrc, .profile или другой сценарий входа в оболочку и всегда иметь доступ к агенту даже при использовании удаленного ssh.
Это старый вопрос, и, вероятно, он заслуживает обновленного ответа. Последующий работает для меня (Fedora 31 / KDE).
kdewallet
) и с тем же паролем, что и ваш пароль для входа. Убедитесь, что он разблокируется при входе в систему. В Arch Wiki есть информация об этом; в моем случае мне пришлось раскомментировать некоторые строки в /etc/pam.d/sddm
.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). Запустите еще раз и обратите внимание, на этот раз он не спрашивает.Так и должно быть.
По моим наблюдениям, цитата «по какой-то причине не работает в моей новой системе» стоит:
Это происходит с моей любимой оболочкой во время вышеупомянутого обновления как минимум дважды. Любые другие оболочки работают нормально. Эта проблема слишком скудно освещена в Интернете из-за низкой популярности. Итак, одно из решений - перейти на zsh. я делаю это
Я копнул глубже и нашел явную причину ошибки. ssh-agent запускается командой
eval $(ssh-agent)
в файле /usr/share/upstart/sessions/ssh-agent.conf пользователем выскочка. Во-первых, исполняемый файл команды 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