Включить интерактивную аутентификацию с клавиатуры только с использованием пароля.

Вопрос или проблема

У меня есть SSH клиент и SSH сервер. Я хочу включить аутентификацию с клавиатуры на сервере, чтобы клиент мог подключаться к серверу только с использованием этого метода аутентификации. В файле /etc/ssh/sshd_config на сервере у меня следующие настройки:

KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes
PubkeyAuthentication no
PasswordAuthentication no

Когда я пытаюсь подключиться с клиента к серверу, я получаю следующий журнал ошибок:

julian: ssh -vvv 192.168.1.102
OpenSSH_8.1p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/client/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 47: Applying options for *
debug2: resolve_canonicalize: hostname 192.168.1.102 is address
debug2: ssh_connect_direct
debug1: Connecting to 192.168.1.102 [192.168.1.102] port 22.
debug1: Connection established.
debug1: identity file /Users/julian/.ssh/id_rsa type 0
debug1: identity file /Users/julian/.ssh/id_rsa-cert type -1
debug1: identity file /Users/julian/.ssh/id_dsa type -1
debug1: identity file /Users/julian/.ssh/id_dsa-cert type -1
debug1: identity file /Users/julian/.ssh/id_ecdsa type -1
debug1: identity file /Users/julian/.ssh/id_ecdsa-cert type -1
debug1: identity file /Users/julian/.ssh/id_ed25519 type -1
debug1: identity file /Users/julian/.ssh/id_ed25519-cert type -1
debug1: identity file /Users/julian/.ssh/id_xmss type -1
debug1: identity file /Users/julian/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.1
debug1: Remote protocol version 1.99, remote software version OpenSSH_4.2
debug1: match: OpenSSH_4.2 pat OpenSSH_2*,OpenSSH_3*,OpenSSH_4* compat 0x00000002
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to 192.168.1.102:22 as 'julian'
debug3: hostkeys_foreach: reading file "/Users/julian/.ssh/known_hosts"
debug3: record_hostkey: found key type RSA in file /Users/julian/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 192.168.1.102
debug3: hostkeys_foreach: reading file "/etc/ssh/ssh_known_hosts"
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: [email protected],[email protected],[email protected],rsa-sha2-512,rsa-sha2-256,ssh-rsa,[email protected],[email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519
debug2: ciphers ctos: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: ciphers stoc: [email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
debug2: MACs ctos: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected],zlib
debug2: compression stoc: none,[email protected],zlib
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: host key algorithms: ssh-rsa,ssh-dss
debug2: ciphers ctos: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,[email protected],aes128-ctr,aes192-ctr,aes256-ctr
debug2: ciphers stoc: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,[email protected],aes128-ctr,aes192-ctr,aes256-ctr
debug2: MACs ctos: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: MACs stoc: hmac-md5,hmac-sha1,hmac-ripemd160,[email protected],hmac-sha1-96,hmac-md5-96
debug2: compression ctos: none,[email protected]
debug2: compression stoc: none,[email protected]
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug1: kex: algorithm: diffie-hellman-group14-sha1
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug2: bits set: 1032/2048
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ssh-rsa SHA256:OHArjVwFi3PAeZ1dpjvNmy1G5U4AY8drwTA+Dh/j4po
debug3: hostkeys_foreach: reading file "/Users/julian/.ssh/known_hosts"
debug3: record_hostkey: found key type RSA in file /Users/julian/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 192.168.1.102
debug3: hostkeys_foreach: reading file "/etc/ssh/ssh_known_hosts"
debug1: Host '192.168.1.102' is known and matches the RSA host key.
debug1: Found key in /Users/julian/.ssh/known_hosts:1
debug2: bits set: 1019/2048
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey out after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey in after 4294967296 blocks
debug1: Will attempt key: /Users/julian/.ssh/id_rsa RSA SHA256:tpvej9coBUmf7otCvtTtRVxkfWGL2VVvD6v5GUdluT4
debug1: Will attempt key: /Users/julian/.ssh/id_dsa 
debug1: Will attempt key: /Users/julian/.ssh/id_ecdsa 
debug1: Will attempt key: /Users/julian/.ssh/id_ed25519 
debug1: Will attempt key: /Users/julian/.ssh/id_xmss 
debug2: pubkey_prepare: done
debug3: send packet: type 5
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: keyboard-interactive
debug3: start over, passed a different list keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug3: send packet: type 50
debug2: we sent a keyboard-interactive packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: keyboard-interactive
debug3: userauth_kbdint: disable: no info_req_seen
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
[email protected]: Permission denied (keyboard-interactive).

Нужно ли мне скопировать ключ с клиента на сервер или внести какие-либо изменения в /etc/ssh/ssh_config?

Нужно ли мне скопировать ключ с клиента на сервер?

Нет. Не только ключ не требуется; сервер настроен для запрета аутентификации по открытому ключу (PubkeyAuthentication no), так что копирование любого ключа бесполезно.

или внести какие-либо изменения в /etc/ssh/ssh_config?

Нет. Этот файл на клиенте важен для клиента (ssh). Похоже, что ваше клиентское устройство настроено правильно. Проблема на сервере. Файл /etc/ssh/ssh_config (если он вообще существует) на сервере не важен для SSH сервера (sshd).


С этого момента ответ касается только сервера.

Я предполагаю, что вы действительно хотите использовать keyboard-interactive (в отличие от password). Тогда вам нужно что-то, что сможет его обрабатывать, например, PAM.

Я на Debian 10 и могу воспроизвести вашу проблему, установив UsePAM no (вместе с конфигурацией, которую вы предоставили) в моем sshd_config. Я могу это исправить, изменив на UsePAM yes.

Я полагаю, что Slackware также использует PAM. Проверьте man 5 sshd_config на сервере и убедитесь, что UsePAM поддерживается вашим sshd.

Фрагмент sshd_config, который вы опубликовали, не указывает UsePAM. Значение по умолчанию – no, так что если действительно нет UsePAM вообще, то это как UsePAM no. Если вы хотите использовать PAM, то явно настройте

UsePAM yes

Замечания:

  • man 5 sshd_config говорит, что “для каждого ключевого слова будет использовано первое полученное значение”. При добавлении UsePAM yes убедитесь, что нет UsePAM no раньше в файле.
  • После изменения sshd_config, перезагрузите SSH демон (sshd). Например, в моем Debian 10 правильная команда – systemctl reload ssh.service. Перезагрузка сервиса не должна повлиять на sshd процессы, которые обрабатывают уже установленные соединения, так что это безопасно делать удаленно.
  • PAM требует собственной настройки. Скорее всего, дистрибутив Linux, который использует ваш сервер, предоставляет нормальные /etc/pam.d/sshd и сопутствующие файлы. В таком случае PAM должен работать из коробки и без проблем после включения UsePAM yes.
  • Некорректная настройка PAM или начало использования его в некорректной конфигурации может закрыть вам доступ к машине. Настоятельно рекомендуется держать привилегированную оболочку (sudo -i) открытую, пока вы не подтвердите, что в итоге (т.е. после всех изменений) вы можете заново войти и снова получить root доступ. В случае проблем используйте привилегированную оболочку, чтобы отменить изменения.

Ответ или решение

Чтобы настроить аутентификацию по методу "keyboard-interactive" с использованием только пароля на SSH сервере, необходимо выполнить несколько специфических шагов. Рассмотрим их подробно.

Теория

Метод аутентификации "keyboard-interactive" в SSH позволяет взаимодействовать с пользователем через консоль, запрашивая у него различные данные, необходимые для входа в систему, такие как пароль. Этот метод часто применяется в сочетании с PAM (Pluggable Authentication Modules), что позволяет настроить более гибкую и безопасную систему аутентификации.

На сервере файл конфигурации sshd_config отвечает за настройку способов аутентификации. В вашем случае важными параметрами являются:

  • KbdInteractiveAuthentication yes: включает метод аутентификации "keyboard-interactive".
  • ChallengeResponseAuthentication yes: часто используется как синоним для "keyboard-interactive".
  • PubkeyAuthentication no: отключает аутентификацию по ключу.
  • PasswordAuthentication no: отключает классическую аутентификацию по паролю.

Однако, простого включения данных параметров может быть недостаточно для полноценного функционирования метода "keyboard-interactive", особенно если не используется PAM.

Пример

На многих системах, например, Debian, метод "keyboard-interactive" может не работать корректно, если не задать UsePAM yes в конфигурации sshd_config. Данная настройка подключает PAM для обработки аутентификации, что позволяет системе правильно обрабатывать запросы "keyboard-interactive".

На сервере с конфигурацией, подобной вашей, изменение на UsePAM yes решает проблемы с подключением:

UsePAM yes

Применение

  1. Откройте файл /etc/ssh/sshd_config на вашем сервере и добавьте строку UsePAM yes, если она отсутствует. Убедитесь, что нет противоречащих записей типа UsePAM no выше по тексту файла, так как SSHD использует первое встреченное значение.

  2. Перезагрузите SSH демон для применения изменений, выполнив следующую команду (например, на Debian): systemctl reload ssh.service.

  3. Убедитесь, что конфигурация PAM для SSHD настроена корректно. Обычно это файл /etc/pam.d/sshd. Важно, чтобы он содержал стандартные требования для аутентификации, так как некорректная настройка может привести к потере доступа.

  4. Проверьте возможность входа с клиентской машины, используя ssh -vvv <адрес_сервера>, для детальной диагностики возможных проблем с подключением.

  5. На время тестирования изменений, рекомендую поддерживать активное административное соединение (например, через sudo -i), чтобы в случае неполадок можно было быстро откатить изменения.

Эти шаги позволят вам настроить аутентификацию с использованием "keyboard-interactive" как единственного метода аутентификации, гарантируя при этом безопасность и удобство использования.

Оцените материал
Добавить комментарий

Капча загружается...