
Недавно я попытался перейти от стандартной настройки открытого ключа SSH к управлению ключами с помощью GPG. Следуяинструкциина вики моего дистрибутива я настроил ssh для использования gpg-agent
вместо default ssh-agent
. Я совершенно уверен, что все прошло нормально: даже с ~/.ssh
удаленным каталогом, ssh-add -l
показывает один ключ, который я настроил для него в gpg.
После этого я установил содержимое моего пульта ~/.ssh/authorized_keys
в точности с выводом локального ssh-add -L
и перезапустил демон.
Теперь, пытаясь подключиться к своему пульту с помощью ssh -v <myremote>
, я получаю следующую ошибку:
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: (none) RSA SHA256:<myfingerprint> agent
debug1: Server accepts key: (none) RSA SHA256:<myfingerprint> agent
sign_and_send_pubkey: signing failed: agent refused operation
debug1: Trying private key: /home/zoickx/.ssh/id_rsa
debug1: Trying private key: /home/zoickx/.ssh/id_dsa
debug1: Trying private key: /home/zoickx/.ssh/id_ecdsa
debug1: Trying private key: /home/zoickx/.ssh/id_ed25519
debug1: Trying private key: /home/zoickx/.ssh/id_xmss
debug1: No more authentication methods to try.
<myremote>: Permission denied (publickey).
Очевидно, сервер соглашается с тем, что мой открытый ключ авторизован, но по непонятной мне причине отказывается продолжать работу.
Обычные ответы, если гуглить " sign_and_send_pubkey: signing failed
", это использовать ssh-add
для добавления отсутствующего закрытого ключа или для изменения разрешений на ключевые файлы. Ни один из этих вариантов не помог в моем случае с использованием gpg-agent. Мой ключ, похоже, доступен для ssh, и нет файлов для изменения разрешений.
Меня беспокоит пара вещей:
- Я ни разу не получаю запрос на ввод пароля gpg
- Открытый ключ имеет вид
ssh-rsa <key> (none)
, заканчивающийся странным «none» вместо стандартногоuser@host
.
Дополнительная информация о моей установке:
- гпг 2.2.15
- libgcrypt 1.8.4
- Вывод
gpgconf
:
gpg:OpenPGP:/usr/bin/gpg
gpg-agent:Private Keys:/usr/bin/gpg-agent
scdaemon:Smartcards:/usr/lib/gnupg/scdaemon
gpgsm:S/MIME:/usr/bin/gpgsm
dirmngr:Network:/usr/bin/dirmngr
pinentry:Passphrase Entry:/usr/bin/pinentry
- gpg функционирует как и ожидалось для шифрования/дешифрования, с работающим pinentry
- Не запущен Gnome или любая другая среда рабочего стола — используется dwm
- морской конек установлен
решение1
Поскольку вам не предлагается ввести пароль GPG, проблемаможет бытьчто запущенный gpg-agent не может получить доступ к дисплею/терминалу. Я столкнулся с теми же симптомами на Mac OS 10.14 (Mojave) с GPG версии 2.2.17.
Я нашел обходной путь на странице руководства gpg-agent:
Примечание: в случае, если gpg-agent получает запрос на подпись, пользователю может потребоваться ввести парольную фразу, которая необходима для расшифровки сохраненного ключа. Поскольку протокол ssh-agent не содержит механизма, сообщающего агенту, на каком дисплее/терминале он запущен, ssh-support gpg-agent будет использовать TTY или X-дисплей, на котором был запущен gpg-agent. Чтобы переключить этот дисплей на текущий, можно использовать следующую команду:
gpg-connect-agent updatestartuptty /bye
Хотя я не нашел постоянного решения, эта команда работает для меня. Ее нужно повторять после каждого перезапуска.