SSH-сервер принимает ключ, но подпись не удаётся

SSH-сервер принимает ключ, но подпись не удаётся

Недавно я попытался перейти от стандартной настройки открытого ключа 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

Хотя я не нашел постоянного решения, эта команда работает для меня. Ее нужно повторять после каждого перезапуска.

Связанный контент