# Настройка SSH

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

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

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

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

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

<figure><img src="/files/XMgMNq95Rhz88yrBirr8" 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. Через панель управления сервером -> [читать](/cp/ssh.md).
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` ([как настроить защиту?](/linux/fail2ban.md)), то вам необходимо будет соответсвующим образом настроить и его, сменив порт с `ssh` на указанный.

```
Port 61234
```

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

```bash
systemctl restart sshd
```

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

#### Host key verification failed.

<figure><img src="/files/kdMxX6JUS7jFiIO01SOq" 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) – мы всегда готовы помочь.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://info.kservers.pro/linux/ssh_settings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
