# Настройка SSH

После любых изменений необходимо перезагрузить сервис SSHD. Вне зависимости от примененных настроек скорее всего ваша текущая SSH-сессия останется активной.

### <mark style="color:orange;">Подключение по SSH-ключам</mark>

#### Генерация ключей

Для этого необходимо сгенерировать пару ключей (публичный и приватный). Публичный хранится на сервере и там где он прописан вы сможете подключиться со своим приватным ключем.

Сгенерировать новую пару можно командой `ssh-keygen`, где вас запросят путь, куда выхотите сохранить ключ и пароль от ключа (можно оставлять пустым, но нежелательно).

<figure><img src="https://487999272-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE1ITKqHKtyPWg6WLypUJ%2Fuploads%2FGQB2jCSuhp760zxO89g4%2Fimage.png?alt=media&#x26;token=509f58ac-f4a2-430c-a38e-a026cece0709" alt=""><figcaption><p>Скриншот 1. Генерация SSH-ключа.</p></figcaption></figure>

Для большей безопасности можно сгенерировать ключ **RSA 4096** следующей командой:

```bash
ssh-keygen -t rsa -b 4096
```

На Windows процесс не сильно сложнее, но делается через приложение [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) или [Termius](https://termius.com/).

#### Установка ключей

После генерации публичный ключ необходимо загрузить на сервер, это можно сделать 4-ю способами:

1. Через панель управления сервером -> [читать](https://info.kservers.pro/cp/ssh).
2. Скопировать содержимое вашего файла с расширением .pub (в нашем случае test.pub) и вставить в `~/.ssh/authorized_keys` на сервере.
3. Командой `ssh-copy-id -i test.pub root@<IP>`
4. Программой PuTTY, Termius или другим менеджером SSH.

### <mark style="color:orange;">Настройка конфигурации</mark>

Конфигурационный файл SSH -> `/etc/ssh/sshd_config`

#### Авторизация только по ключу

После загрузки ключа доступ к серверу все еще можно получить посредством пароля, это можно исправить следующими параметрами.

```bash
PubkeyAuthentication yes
PasswordAuthentication no
```

#### Запрет входа для root

Довольно частая практика – создавать пользователя и ограничить доступ к серверу для суперпользователя (root).

```bash
PermitRootLogin no
```

#### Изменение порта

По умолчанию используется порт `22`, но для большей уверенности можно поменять на условный `61234`. Если вы используете `fail2ban` ([как настроить защиту?](https://info.kservers.pro/linux/fail2ban)), то вам необходимо будет соответсвующим образом настроить и его, сменив порт с `ssh` на указанный.

```
Port 61234
```

#### Применение изменений

```bash
systemctl restart sshd
```

### <mark style="color:orange;">Возможные ошибки при подключении</mark>

#### Host key verification failed.

<figure><img src="https://487999272-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FE1ITKqHKtyPWg6WLypUJ%2Fuploads%2Fm7Bxs6cl3natPiiKQsvs%2Fimage.png?alt=media&#x26;token=2247f9cf-26f7-4d76-b3ee-b7e6d34bb8b5" alt=""><figcaption><p>Скриншот 2. Ошибка верификации ключа.</p></figcaption></figure>

Немного теории, каждый раз когда вы при подключении вводите `yes` в терминал – вы сохраняете публичный ключ сервера (он есть всегда, даже если аутентификация по паролю) в `~/.ssh/known_hosts`.&#x20;

Это необходимо для предотвращения атак типа MITM (Man-In-The-Middle).

Если ключ сервера не совпадает с тем, что у вас сохранен для этого же сервера, то вы получаете соответствующую ошибку.

Решение проблемы – сбросить сохраненные ключи сервера следующей командой:

```bash
ssh-keygen -R <IP_АДРЕС>
```

#### Permission denied (publickey).

Данная ошибка означает то, что на сервере выключена аутентификация по паролю. Нужно подключиться с вашим ключoм, отредактировать конфиг и перезагрузить ssh.service, либо написать в [поддержку](https://t.me/ksupports_bot) – мы всегда готовы помочь.
