Как отключить SSH логин с паролем для некоторых пользователей?

166

В Linux (Debian Squeeze) я хотел бы отключить SSH-вход с использованием пароля для некоторых пользователей (выбранной группы или всех пользователей, кроме root). Но я не хочу отключать вход с использованием сертификата для них.

редактировать: большое спасибо за подробный ответ! По какой-то причине это не работает на моем сервере:

Match User !root
PasswordAuthentication no

... но может быть легко заменено

PasswordAuthentication no
Match User root
PasswordAuthentication yes
Степан
источник
Может это из-за твоего отступа?
ноль
7
Стоит отметить, что эти строки должны быть в конце файла
zidarsk8
1
! root также не работает для меня. Второй подход сделал свое дело.
natenho
Я видел случаи, когда Match User "!root,*"делал работу.
Роман

Ответы:

181

Попробуйте Matchв sshd_config:

Match User user1,user2,user3,user4
    PasswordAuthentication no

Или по группе:

Match Group users
    PasswordAuthentication no

Или, как указано в комментарии, отрицанием:

Match User !root
    PasswordAuthentication no

Обратите внимание, что сопоставление действует «до другой строки совпадения или до конца файла». (отступ не имеет значения)

Cakemox
источник
4
предпочитаю Match user !rootдля этого дела
84104
1
Круто, я не знал о синтаксисе Match. Однако я хотел бы сделать одно предложение: если это общедоступный сервер, я бы вообще не разрешил вход в систему через SSH. Вероятно, не такая уж большая сделка, если это Внутренняя, хотя ..
Safado
4
@SpacemanSpiff Вот для чего нужны а) надежные пароли и б) denyhosts / fail2ban.
ceejayoz
2
@ deed02392 Вы можете считать ключ действительно очень надежным паролем, если хотите.
ceejayoz
4
Это намного сильнее, это не в том же парке, это было моей точкой зрения. Аутентификация по паролю должна быть отключена и для пользователя root, а ключи разрешены только для входа в систему.
deed02392
22

Matchв sshd_configработает хорошо. Вы должны использовать, Match allчтобы завершить блок матча, если вы используете openssh 6.5p1 или выше. Пример:

PasswordAuthentication no
Match User root
PasswordAuthentication yes
Match all
Тревор Хейтли
источник
Это не сработало для меня ...
Димитриос
«Совпадение всех» сделало свое дело. Спасибо. Без "Match all" sshd не запускается.
Владимир Кондратьев
3

Есть несколько способов, которыми вы можете сделать это - во-первых, вы можете запустить второй демон sshd на другом порту с другой конфигурацией - это немного хак, но с некоторой работой с chroot он должен работать просто отлично.

Кроме того, вы можете разрешить аутентификацию по паролю, но заблокировать пароли для всех, кроме одного пользователя. Пользователи с заблокированными паролями по-прежнему смогут проходить аутентификацию с открытыми ключами.

mitchellhislop
источник
-1

Вы можете просто перейти в файл / etc / ssh / sshd_config и добавить строку Разрешить -> AllowUsers user1 To Deny ---> DenyUsers user2

мы можем разрешить / запретить вход в систему для определенного набора хостов, используя файлы hosts.allow или hosts.deny, расположенные в папке / etc

Sharan
источник
-1

Из-за некоторых причин безопасности вам может потребоваться заблокировать доступ определенных пользователей SSH к Linux.

Отредактируйте файл sshd_config, расположение может отличаться в зависимости от дистрибутива Linux, но обычно оно находится в / etc / ssh /.

Откройте файл, войдя в систему как root:

# vi /etc/ssh/sshd_config

Вставьте строку в конец файла конфигурации: -

DenyUsers username1 username2 username3 username4

Сохраните его и перезапустите службы SSH. В основном username1, username2, username3 & username4 Вход по SSH запрещен.

Запустите команду ниже, чтобы перезапустить то же самое: -

# systemctl restart sshd

Требование выполнено. Пожалуйста, возьмите ssh от этих пользователей, и вы получите ошибку "Доступ запрещен"

Эвердата технологии
источник
1
Вопрос был об отключении входа по паролю (но при сохранении входа с ключом аутентификации).
Джеральд Шнайдер