> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/client-area/kak-zashitit-server-vps-vds-ot-nesankcionirovannogo-dostupa/ssh-klyuchi.md](https://docs.f3cloud.com/ru/client-area/kak-zashitit-server-vps-vds-ot-nesankcionirovannogo-dostupa/ssh-klyuchi.md).

# Вход по SSH-ключу и запрет входа по паролю в Linux

Как настроить вход на сервер по SSH-ключу, создать отдельного пользователя с sudo и отключить вход по паролю и под root. Команды для Ubuntu, Debian, AlmaLinux, CentOS и Oracle Linux.

Пароль можно подобрать, а SSH-ключ нельзя. Поэтому самая полезная мера защиты сервера – входить по ключу и полностью запретить вход по паролю. Тогда боты, которые круглосуточно перебирают пароли, просто упрутся в закрытую дверь.

Вот что мы сделаем по шагам.

1. создадим отдельного пользователя вместо root;
2. сделаем SSH-ключ на вашем компьютере;
3. скопируем ключ на сервер;
4. проверим вход по ключу;
5. отключим вход по паролю и под root.

> **Что понадобится.**
>
> Для начала нужен доступ к серверу по SSH под root. IP-адрес и пароль есть в письме после заказа и в «Инструкции» в личном кабинете, где её найти, мы показали в статье [о заказе VPS](https://docs.f3cloud.com/ru/client-area/order-vps.md#access).

***

### 1. Создайте отдельного пользователя

Команды выполняются на сервере, под root.

Работать под root каждый день небезопасно, ведь одна ошибка или украденный пароль дают злоумышленнику полный доступ. Поэтому создадим обычного пользователя и дадим ему право выполнять команды администратора через `sudo`.

#### Ubuntu и Debian

```bash
# Создаём пользователя admin (имя можно выбрать любое)
# Команда попросит придумать пароль, остальные вопросы можно
# пропустить клавишей Enter
adduser admin

# Добавляем пользователя в группу sudo, чтобы он мог выполнять
# команды администратора
usermod -aG sudo admin
```
#### AlmaLinux, CentOS, Oracle Linux

```bash
# Создаём пользователя admin (имя можно выбрать любое)
adduser admin

# Задаём ему пароль
passwd admin

# На этих системах администраторы входят в группу wheel
usermod -aG wheel admin
```

Пароль пользователя ещё пригодится, его будет спрашивать `sudo`. А вот для входа на сервер он скоро станет не нужен.

***

### 2. Создайте SSH-ключ на своём компьютере

Эта команда выполняется на своём компьютере. В Windows откройте PowerShell, в macOS и Linux – Терминал.

```bash
# Создаём ключ типа ed25519, это современный и надёжный вариант
ssh-keygen -t ed25519 -a 64
```

Программа задаст пару вопросов.

* **куда сохранить ключ** – просто нажмите <kbd>Enter</kbd>;
* **passphrase** – пароль к самому ключу. Его лучше задать, тогда украденным файлом ключа без этого пароля никто не воспользуется.

В итоге появятся два файла в папке `.ssh` вашего пользователя.

* `id_ed25519` – **приватный ключ**, он остаётся только у вас;
* `id_ed25519.pub` – **публичный ключ**, его мы положим на сервер.

> **Приватный ключ никому не передавайте.**
>
> Файл `id_ed25519` – это ваш приватный ключ. Не отправляйте его в мессенджерах, не загружайте его в облако и не выкладывайте на сервер.\
> Наружу уходит только файл с окончанием `.pub`.

***

### 3. Скопируйте ключ на сервер

Команда выполняется на своём компьютере. Вместо `SERVER_IP` подставьте IP-адрес сервера.

#### macOS и Linux

```bash
# Копируем публичный ключ на сервер для пользователя admin
ssh-copy-id admin@SERVER_IP
```
#### Windows (PowerShell)

```powershell
# В Windows нет команды ssh-copy-id, поэтому передаём ключ одной
# строкой:
# создаём на сервере папку .ssh, дописываем ключ в
# authorized_keys и выставляем нужные права
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh admin@SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
```

Команда попросит пароль пользователя `admin`. Это последний раз, когда он нужен для входа.

***

### 4. Проверьте вход по ключу

Подключитесь со своего компьютера, в **новом** окне терминала.

```bash
# Подключаемся под новым пользователем. Пароль от сервера
# спрашиваться не должен,
# максимум passphrase от ключа, если вы её задали
ssh admin@SERVER_IP

# Уже на сервере проверяем, что sudo работает. Команда должна
# вывести root
sudo whoami
```

Если вы подключаетесь через Termius, добавьте ключ в его настройки и укажите пользователя `admin`. Как подключаться через Termius, мы показали в [отдельной статье](https://docs.f3cloud.com/ru/vps/termius-connection.md).

***

### 5. Отключите вход по паролю и под root

> **Не закрывайте старое подключение.**
>
> Пока вы не убедились, что вход по ключу работает в новом окне, держите прежнюю сессию открытой. Если что-то пойдёт не так, через неё всё легко вернуть.

Настройки SSH в Ubuntu и Debian читаются сразу из нескольких файлов в папке `/etc/ssh/sshd_config.d/`, и **побеждает та настройка, что встретилась первой**. Например, файл `50-cloud-init.conf` может разрешать вход по паролю, и тогда ваш запрет в другом файле просто не сработает. Поэтому создадим свой файл с номером `00`, тогда сервер прочитает его раньше остальных.

Дальше команды выполняются на сервере.

```bash
# Создаём файл с нашими настройками SSH и открываем его в
# редакторе nano
sudo nano /etc/ssh/sshd_config.d/00-security.conf
```

Вставьте в файл эти строки.

```ssh-config
# Запрещаем вход под root напрямую
PermitRootLogin no
# Запрещаем вход по паролю
PasswordAuthentication no
# Оставляем вход по ключам
PubkeyAuthentication yes
```

Чтобы сохранить файл, нажмите <kbd>Ctrl</kbd> + <kbd>O</kbd> и <kbd>Enter</kbd>, а чтобы выйти из редактора, <kbd>Ctrl</kbd> + <kbd>X</kbd>.

Теперь проверим настройки и применим их.

```bash
# Проверяем настройки на ошибки. Если команда ничего не вывела,
# всё в порядке
sudo sshd -t

# Смотрим, какие настройки действуют на самом деле
sudo sshd -T | grep -E "permitrootlogin|passwordauthentication"
```

В ответе должно быть `permitrootlogin no` и `passwordauthentication no`. Если там другое значение, значит, его перебивает другой файл. Посмотрите содержимое папки командой `ls /etc/ssh/sshd_config.d/`.

Осталось перезапустить SSH.

#### Ubuntu и Debian

```bash
# Перезапускаем SSH, чтобы новые настройки заработали
sudo systemctl restart ssh
```
#### AlmaLinux, CentOS, Oracle Linux

```bash
# Перезапускаем SSH, чтобы новые настройки заработали
sudo systemctl restart sshd
```

***

### 6. Финальная проверка

Откройте ещё одно окно терминала и проверьте оба варианта.

```bash
# Вход под admin по ключу должен работать
ssh admin@SERVER_IP

# А вход под root теперь должен заканчиваться ошибкой Permission
# denied
ssh root@SERVER_IP
```

Если всё так, поздравляем, подобрать пароль к вашему серверу больше невозможно. Старую сессию можно закрывать.

> **Если доступ всё-таки пропал.**
>
> Если доступ всё-таки пропал, откройте сервер кнопкой <kbd>Консоль</kbd> в списке серверов в личном кабинете. Через неё сервер открывается прямо в браузере, без SSH, и настройки можно вернуть, удалив файл `/etc/ssh/sshd_config.d/00-security.conf`.

***

### Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Сайт хостинга:** [https://f3cloud.com](https://f3cloud.com/ru)
