# Вход по ключу в SSH

Помимо использования SSH на не стандартном порту (не панацея), лучше усилить защиту используя вход по ключу. Пару ключей SSH сложнее взломать по сравнению с обычным паролем. Содержимое ключей генерируется с использованием алгоритмов, что затрудняет его перебор. Доступ может получить только машина, на которой находится закрытый ключ.

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

Тк в течении 2023 года появлялись научные статьи о возможной компрометации алгоритма RSA, для генерации ключа мы будем использовать алгорим использующий эллиптические кривые. На машине Linux (Хост А или Б) выполните следующую команду:

```bash
ssh-keygen -t ecdsa -b 521
```

Далее нажимаем просто клавишу Enter. Либо можно задать имя для ключевой пары или добавить пароль.

<p class="callout info">Добавление пароля к закрытому ключу добавляет многофакторную аутентификацию.</p>

Выполняем действия на машине на которую хотим заходить по SSH (Хост Б), в корневой директории пользователя если нет папки `.ssh`, то ее необходимо создать:

```
cd ~
mkdir .ssh
```

Копируем содержимое публичного ключа (`my_key.pub`) и добавляем его содержимое в файл домашней директории пользователя root `authorized_keys` в папке `.ssh` пример команды ниже, для удобства можно использовать удобный вам текстовый редактор (в нашем случае публичный ключ был скопирован на Хост Б):

```
cat my_key.pub >> .ssh/authorized_keys
```

Либо операцию выше можно выполнить с помощью другой команды:

```bash
ssh-copy-id -i /root/.ssh/my_key root@<Хост Б>
```

Теперь на Хосте Б нужно поменять конфиг сервиса sshd, чтобы по SSH по паролю вход был запрещен:

```
vi /etc/ssh/sshd_config
```

Раскомментируем/Добавляем следующие строки:

```bash
PasswordAuthentication no 
PermitEmptypasswords no 
LoginGraceTime 0

# if ssh tunnels need
AllowTcpForwarding yes
GatewayPorts yes
```

Получем следующее:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/scaled-1680-/3njimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/3njimage.png)

Выходим из редактирования с сохранением (для vi потребуется отдельная статья, чтобы узнать как оттуда выйти - шутка).

Перезапускаем службу сервиса SSH на Хосте Б:

```bash
systemctl restart ssh.service
```

Теперь на Хост Б можно зайти из машины, где присутсвует закрытый ключ, пример команды подключения с ключом на Linux системах:

```
ssh -i my_key root@<Хост Б>
```

А при попытке входа по паролю на Хост Б будет возникать подобная ошибка:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/scaled-1680-/HXbimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-12/HXbimage.png)