Статья Как отключить вход по ssh паролю на Linux для повышения безопасности
Я хочу отключить доступ для ssh-клиентов с помощью пароля и разрешить только авторизацию ssh с помощью SSH-ключей. Как отключить аутентификацию паролей для SSH в операционных системах Linux?
Во-первых, вам нужно настроить обычную учетную запись пользователя. Затем настройте SSH-ключи для входа. После того, как вы настроили SSH-ключи, вам необходимо отключить пароль для всех пользователей, включая root. В этом руководстве показано:
Как создать ключ ssh и отключить аутентификацию пароля в системе на базе Linux или Unix
В целях демонстрации я использую Ubuntu Linux
Шаг 1 – Вход на удаленный сервер
Используйте команду ssh или клиент вроде Putty:
Шаг 2 – Создание нового пользовательского аккаунта
Введите следующую команду в системе на базе Linux, чтобы создать нового пользователя с именем vivek:
SSH — настройка доступа к серверу, команды и подключение без паролей
SSH (Secure Shell) — это сетевой протокол, предназначенный для удалённого управления сервером и передачи данных по зашифрованным TCP соединениям. Большинство хостингов, даже виртуальных, сегодня предоставляет доступ как по FTP, так и по SSH. На мой взгляд, это здорово, SSH намного удобнее и безопаснее в использовании.
Настройка SSH
Настройка будет происходить под выделенный сервер, VDS, VPS на Debian, Ubuntu. Конфигурационный файл располагается тут: /etc/ssh/sshd_config .
Если у вас обычный хостинг, всё и так должно быть настроено как надо, переходите к разделу авторизации по ключам.
По умолчанию, демон SSHD (именно в него мы вносим изменения) не нуждается в каких-либо настройках и работает нормально. Мы внесём лишь пару небольших изменений с целью ограничить доступ нежелательных лиц к серверу.
В результате внесения неправильных изменений в конфигурационный файл вы можете потерять доступ к серверу по ssh, поэтому убедитесь, что у вас есть альтернативные варианты для доступа к нему, например, с помощью панели управления ISPManager.
Как ограничить доступ по SSH
Все изменения вносятся в /etc/ssh/sshd_config
Чтобы изменения вступили в силу, необходимо перезагрузить SSH
Сменить порт
Теперь при авторизации вам нужно вместо стандартного 22 порта указывать 9724 .
Способ очень простой и действенный против большинства простых ботов хакеров, которые стучатся в стандартные порты. Тут главное не создать конфликт с другими службами и подобрать заведомо неиспользуемое число.
Запретить связь по старому протоколу
Здесь мы определяем, что связь возможна только по протоколу v2
Запретить авторизацию под root
По умолчанию no . Если yes , можно авторизовываться под рутом. Под root работать небезопасно, лучше создать своего пользователя и работать под ним.
Если вы авторизованы не под root, перед всеми консольными командами нужно добавлять sudo — расшифровывается как Substitute User and DO — подмени юзера и делай (под ним). Например, позволяет исполнять команды от имени суперпользователя root.
Уменьшить число попыток авторизации
Количество попыток ввода пароля. По умолчанию 6. При неудачном переборе сеанс связи обрывается.
Уменьшить время ожидания авторизации
По умолчанию, 120 секунд может длиться сеанс авторизации. По истечению этого времени он обрывается. 2 минуты на авторизацию — это перебор, всё это время сервер держит связь открытой, что очень нерационально. Полминуты за глаза хватит.
Закрыть доступ по IP
Прежде чем настраивать ограничения по IP, убедитесь, что в случае ошибки в настройке и последующего бана собственного IP у вас останется альтернативный способ вернуть доступ к серверу
Если доступ нужен только вам, самым простым и надёжным будет закрыть доступ отовсюду, кроме вашего IP или, если он динамический, то диапазона IP.
-
Открываем /etc/hosts.allow и добавляем туда
где 192.168.1.1 — ваш IP. Если у вас динамический IP, определите IP с маской подсети и запишите Вашу подсеть вместо IP, например:
Теперь никто, кроме вас, не сможет авторизоваться на сервере по SSH.
Ещё один способ ограничения доступа по IP
Можно воспользоваться следующей директивой:
Здесь мы разрешаем доступ только для IP 1.2.3.4
Авторизация SSH по ключам
Намного безопаснее, удобнее и правильнее будет настроить ssh авторизацию без пароля. Для этого будет использоваться авторизация по ключу.
Для настройки нам понадобится файловый менеджер, например, Far Manager с плагином WinSCP, и Putty
Итак, вот инструкция:
-
Распаковываем архив, открываем PUTTYGEN:

Открываем PUTTYGEN (PuTTY Key Generator)


В целях безопасности нежелательно работать под рутом, но я покажу пример команд для root, а вы уже скорректируете под своё имя пользователя
Итак, копируем файл sheensay.ru.pub в /root/.ssh/ .
Далее нужно импортировать данные в файл authorized_keys
Far Manager 3 имеет встроенный NetBox, последователя WinSCP, так что, ничего дополнительно устанавливать не придётся.
Открываем Far Manager, Alt + F1 , выбираем WinSCP , далее Shift + F4 и настроим наше подключение. Допустим, мы сохранили приватный файл в D:/SSH/
При настройке нужно будет указать IP или доменное имя на нём для доступа к серверу, порт, на котором висит SSH, имя пользователя и путь к приватному файлу-ключу

Настройка подключения по SSH
Подключение настроено. Если что-то сделали не так, при авторизации появится ошибка Server refused our key , то есть Сервер не принял наш ключ. В этом случае пройдитесь по всем пунктам последовательно и поищите ошибку
Отключить авторизацию по паролю
Теперь, когда всё настроено, совсем не лишним будет отключить авторизацию по паролю. Для этого внесём изменения в конфигурационный файл:
Fail2ban для защиты SSH сервера
Самым действенным способом защиты SSH является защита от перебора паролей. Её может обеспечить утилита fail2ban .
Установка Fail2ban
Настройка Fail2ban
Удаляем дефолтный файл настроек fail2ban для Debian
Затем, запускаем создание собственного файла настроек
Открывается редактор, туда вписываем следующее:
127.0.0.1/8 — меняете на свой IP (или диапазон, если IP динамический). Чтобы добавить несколько IP или диапазонов, указываем их через пробел.
- port — по какому порту банить IP, попавший на bantime . Если на сервере нестандартный порт SSH, укажите его здесь
- ignoreip — белый список IP, меняем на свои значения
- findtime — время, в течение которого можно ошибиться не более maxretry раз
- maxretry — максимальное число попыток авторизоваться по SSH в течение findtime
- bantime — время бана
Ещё можно добавить нижеследующий код в дополнение к вышеуказанному, он поможет от активного брутфорса пароля SSH ботнетами:
- banaction — как банить. Чтобы банить по всем портам, указываем iptables-allports , в таком случае, указывать port не обязательно
После внесения изменений нужно перезагрузить fail2ban
Как перезагрузить fail2ban
Как проверить fail2ban
Чтобы проверить, верно ли работает fail2ban , можно запустить клиента и проверить статус sshd :
Если всё верно сделано, увидите надпись:
Если что-то не так, то:
В таком случае, вернитесь выше и перепроверьте шаги настроек
Как сбросить бан fail2ban
Сбрасывает все баны всех IP всех служб:
Если нужно сбросить конкретную службу, например SSH , и конкретный IP 1.2.3.4 :
Если так случилось, что ваш IP забанен, и нет возможности его сменить, альтернативой для авторизации на сервере может стать VNC , как правило, хостеры предоставляют отдельный доступ к нему. С помощью VNC вы сможете разбанить свой IP с помощью вышеуказанных команд
Как перезагрузить SSH
Как сбросить бан fail2ban
Сбрасывает все баны всех IP всех служб:
Если нужно сбросить конкретную службу, например SSH :
Если так случилось, что ваш IP забанен, и нет возможности его сменить, альтернативой для авторизации на сервере может стать VNC , как правило, хостеры предоставляют отдельный доступ к нему. С помощью VNC вы сможете разбанить свой IP с помощью вышеуказанных команд
Disabling Password Authentication on Linux Servers
On this post we are going to explain how to add ssh keys to login to a Linux server and disable password authentication to increase the security of our VPS(Virtual Private Servers).
The problem
By default, when we create or deploy a VPS with Linux, password authentication for users is enabled. This is a big problem because we are letting the possibility for attackers to get access to our servers. To have an idea of the magnitude of this issue let’s check the file /etc/var/auth.log of a server under attack:
As you can see the attacker is trying to get access to our server using the user root . Some services as AWS EC2 creates the user ubuntu by default when a new VPS is initiated. This is a well known fact by the attackers and on this log you can see an attempt to break in using this user too.
The solution
A simple way to ensure our server, is disabling password authentication over ssh. But first we need to configure ssh keys to guarantee a secure access to our server and don’t let ourselves out of access to the VPS.
SSH Keys access configuration
Step One — Create the RSA Key Pair
The first step is to create the key pair on the client machine(probably your personal computer):
$ ssh-keygen -t rsa
Step Two — Store the Keys and Passphrase
Once your enter the command for generate the key, you will get some questions:
Enter file in wich to save the key (/home/user/.ssh/id_rsa):
If you press enter, it will save the key to the default location specified in parenthesis, otherwise you should enter a path to save your key.
Enter passphrase (empty for no passphrase):
It’s up to you wether you want to use a passphrase. The main benefit of using a passphrase is to add an extra layer of security to your key, the downside is that you must enter the passphrase every time you use your key.
The entire process looks like this:
$ ssh-keygen -t rsa
The public key is now located in /home/user/.ssh/id_rsa.pub . The private key (identification) is now located in /home/user/.ssh/id_rsa .
Step Three — Copy the Public Key to the server
Now that we have the key pair generated, it’s time to copy the public key to the server we want to get access to. You can use ssh-copy-id utility like this:
Alternatively, you can paste in the keys using SSH:
No matter which command you use, you should see something like:
This message helps us to make sure that we haven’t added extra keys that you weren’t expecting.
It is recommended that you try to get access to the server with the recently added ssh key before disabling the password authentication:
If you set a passphrase when creating your SSH key, you will be asked to enter the passphrase at this point (and whenever else you log in in the future).
Disabling password authentication
To disable this feature on our servers we must follow these steps:
Edit the file /etc/ssh/sshd_config
This is the main configuration file for the ssh service. We should then modify the file with these configurations:
PasswordAuthentication : allows or deny the use of the authentication schema defined in RFC-4252 section 8.
ChallengeResponseAuthentication : allows or deny the use of the authentication schema called keyboard interactive , which let the server to ask the user interactive questions to verify it’s identity (passwords) as defined on RFC-4256.
UsePAM : ssh service permit the use of Pluggable Authentication Module . Some Server’s Admins will argue that setting this configuration to no is not a good practice due to the fact that we are not only disabling password authentication but also any other form of authentication that uses PAM but in most cases this is not relevant enough. On a future post I will explain how to configure it to disable only password authentication for PAM .
Reload ssh service
service ssh reload
This command is for Ubuntu servers, use the appropriated one for your distro.
And that is all. Finally check your connection on another terminal to verify that you still have access to your server using SSH Keys. For any question please contact me.
Disable password authentication for SSH [closed]
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 2 years ago .
I’m looking for a way to disable SSH clients from accessing the password prompt as noted here.
I am unable to disable the password: prompt for root login. I have change the sshd_config file to read:
and have also changed the permissions chmod 700
/.ssh and chmod 600
/.ssh/authorized_keys . What am I missing? Does this require I have a passphrase?