Это на этот вопрос уже есть ответ:
С тех пор, как я установил Ubuntu Desktop 16.10 Gnome (раньше у меня был 15.10), меня раздражал этот факт что всякий раз, когда я пытаюсь добавить SSH-ключ или импортировать ключ GPG с помощью терминала, появится всплывающее окно графического интерфейса пользователя с запросом пароля.
Используя SSH, я обхожу эту проблему, запуская новый агент на терминале и затем пытаясь добавить ключ. И, наконец, он запрашивает у меня парольную фразу в TTY или не в графическом интерфейсе.
С GPG я только начал изучать, поэтому не знаю, как обойтись.
Есть ли способ отключить это и заставить их запрашивать парольную фразу в TTY при доступе из TTY?
Я прочитал ответы в этом вопросе, но он касается ubuntu 12.04 и два верхних ответа не сработали для меня.
SSH и GPG используют так называемые "агенты" для кэширования дешифрованных закрытых ключей, так, чтобы пользователи не вводили свои пароли все время. По умолчанию они используют программу pinentry
к этой цели.
Прежде чем мы продолжим, давайте удостоверимся, что пример для программы ввода PIN-кода командной строки доступен в Вашей системе. В репозитории Ubuntu мы имеем pinentry-curses
(начиная с навсегда) и pinentry-tty
(начиная с Гостеприимного), но они не установлены по умолчанию. Можно получить его от пакета того же имени:
sudo apt install pinentry-curses
Можно скорректировать программу, используемую для ввода PIN-кода также:
Установка (в расчете на пользователя) pinentry-program
в Вашем ~/.gnupg/gpg-agent.conf
к программе ввода PIN-кода командной строки, например:
pinentry-program /usr/bin/pinentry-curses
Необходимо или перезапустить агент или иметь его, перезагружают его конфигурацию:
gpg-connect-agent <<< RELOADAGENT
(в масштабе всей системы) Во всех общих дистрибутивах Linux включая Ubuntu значение по умолчанию pinentry
программа является на самом деле символьной ссылкой на фактическую программу ввода PIN-кода. Целью этой символьной ссылки управляют update-alternatives
система. Можно использовать его для изменения цели ссылки на программу ввода PIN-кода командной строки:
sudo update-alternatives --config pinentry
Недостаток обоих из этих методов - то, что Вы не сможете использовать ввод PIN-кода командной строки, если SSH или GPG будут вызваны из программы, работающей без терминала, например, графического клиента SFTP или почтового агента пользователя. Лучший путь состоял бы в том, чтобы использовать графическую программу ввода PIN-кода только, когда X-сервер доступен, и терминал недоступен. К этой цели нам будет нужен маленький сценарий обертки, который анализирует среду перед подчинением правильной программе ввода PIN-кода.
Давайте предположим, что у нас есть следующий исполняемый сценарий оболочки в ~/.local/bin/my-smart-pinentry
:
#!/bin/sh
set -eu
# Configuration -- adjust these to your liking
PINENTRY_TERMINAL='/usr/bin/pinentry-curses'
PINENTRY_X11='/usr/bin/pinentry-x11'
# Action happens below!
if [ -n "${DISPLAY-}" -a -z "${TERM-}" ]; then
exec "$PINENTRY_X11" "$@"
else
exec "$PINENTRY_TERMINAL" "$@"
fi
Для использования этой обертки в качестве ввода PIN-кода "программа", можно использовать упомянутый выше метод в расчете на пользователя. Можно также добавить его к update-alternatives
база данных.