Как отключить 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

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


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 он должен работать просто отлично.

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


-1

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

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


-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
Вопрос был об отключении входа по паролю (но при сохранении входа с ключом аутентификации).
Джеральд Шнайдер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.