Проверка подлинности с помощью открытого ключа SSH - сервер принимает ключ, но аутентификация не выполняется
Я помогаю другу, у которого возникли проблемы с подключением с использованием аутентификации с открытым ключом, к обслуживаемому мной серверу. Аутентификация с открытым ключом отлично работает для пары других пользователей. Конечно, открытый ключ моего друга находится в файле author_keys на сервере.
debug1: Host 'xxxxx' is known and matches the RSA host key.
debug1: Found key in /home/xxx/.ssh/known_hosts:3
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue:
publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure. Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Unspecified GSS failure. Minor code may provide more information
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/xxx/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentications that can continue:
publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering RSA public key: email@address.com
debug1: Authentications that can continue:
publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/xxx/.ssh/id_dsa
debug1: Trying private key: /home/xxx/.ssh/id_ecdsa
debug1: Next authentication method: password
Следующая строка не имеет смысла для меня
Server accepts key: pkalg ssh-rsa blen 279
Поскольку кажется, что сервер считает, что открытый ключ совершенно корректен, почему же он продолжает аутентификацию по паролю вместо аутентификации пользователя?
3 ответа
Я полагаю, что вы показываете логи на стороне клиента / выходные данные отладки. Я бы посмотрел журналы на стороне сервера, поскольку они обычно дают больше подробностей о том, почему сервер отклонил попытку аутентификации с открытым ключом.
Например, небезопасные разрешения для пользователей домашних или.ssh каталогов.
В моем случае проблема заключалась в том, что пользователь пытался подключиться от имени пользователя root, и я отключил root ssh login (что, вероятно, должен делать каждый). Поэтому убедитесь, что ваш друг пытается подключиться через правильную учетную запись пользователя без полномочий root.
Я недавно испытал это с интерфейсом Gerrit SSH. Проблема заключалась в том, что мой локальный агент SSH предлагал кучу разных ключей серверу Gerrit, и после некоторого ограничения сервер просто отказывался принимать дополнительные ключи (но все равно отвечал с Server accepts key
). Я не знаю, относится ли это поведение к Gerrit или к общему OpenSSH.
Исправление состояло в том, чтобы принудительно выбрать правильный ключ в ~/.ssh/config
:
Host gerrit.example.org
IdentityFile ~/path/to/my_key
IdentitiesOnly yes
Убедившись, что ~/path/to/my_key.pub
существует (может быть создан с ssh-keygen -f ~/path/to/my_key -y > ~/path/to/my_key.pub
), агент ssh мог предоставить ключ без необходимости повторного ввода ключевой фразы, но не предоставил никаких других ключей.