# SSH-ключи

Удаленное подключение к серверу всегда требует аутентификации клиента, чтобы несанкционированные лица не получили доступ. Базовым методом аутентификации является использование пароля. Но у паролей есть один недостаток — их можно взломать, особенно если владелец сервера не позаботился о сложности пароля.

Для SSH‑подключений к серверам Linux рекомендуется альтернативный метод — аутентификация с помощью SSH‑ключей. Эти ключи представляют собой пару — закрытый ключ и открытый ключ. Закрытый ключ необходимо хранить, соответственно, в приватной среде клиента, а открытый ключ отправляется на сервер и помещается в `authorized_keys` файл.

{% hint style="info" %}
Этот метод аутентификации неприменим к серверам Windows, поскольку в RDP‑подключении отсутствует такая функциональность.
{% endhint %}

Использование SSH‑ключей не является системным требованием платформы Navixy, но настоятельно рекомендуется владельцам серверов по соображениям безопасности.

{% hint style="danger" %}
Не передавайте закрытые ключи кому-либо, кому вы не доверяете. Если вам нужно предоставить доступ к вашему серверу третьей стороне, нет необходимости делиться собственным ключом. Вместо этого вы можете запросить у них открытый ключ и временно добавить его на свой сервер, а затем удалить после завершения работ.
{% endhint %}

## Создание SSH‑ключей в Linux

Если на вашей рабочей станции используется ОС на базе Linux, вам необходимо использовать пакет **openssh** . Он может быть предустановлен или может потребовать дополнительной установки. В Ubuntu и Debian он устанавливается следующей командой:

```
apt -y install openssh-server
```

Для других дистрибутивов команда может отличаться.

Чтобы начать генерацию ключей, выполните команду:

```
ssh-keygen
```

Вам будет предложено указать путь к файлу, где будут размещены ключи. Вы можете оставить расположение по умолчанию (в скобках), нажав Enter, либо указать собственный путь и имя файла.

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

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-999255a7ab863755c74e1fa67b7ab8c1f9d9a214%2Fimage-20240214-122034.png?alt=media)

После успешной генерации пары ключей вы увидите уведомление:

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-0fd25c419623fbc908e70ae2e754e97971bfc384%2Fimage-20240214-122134.png?alt=media)

При использовании расположения по умолчанию открытый ключ сохраняется в `/root/.ssh/id_rsa.pub`, а закрытый ключ — в `/root/.ssh/id_rsa`.

Теперь необходимо скопировать открытый ключ на ваш сервер, в каталог пользователя, от имени которого будет выполняться удаленное подключение. Предположим, что имя пользователя — `navixy`. Подключитесь к вашему серверу и отредактируйте файл в любом текстовом редакторе, например:

```
vi /home/navixy/.ssh/authorized_keys
```

Укажите содержимое вашего открытого ключа после `ssh-rsa`. Вы можете указать краткий комментарий после ключа, чтобы пояснить его назначение.

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-2bb417eb5c4443182ad4568056c666651afbb053%2Fimage-20240214-124130.png?alt=media)

Сохраните файл.

Теперь вы можете подключиться к серверу, используя вновь созданный SSH‑ключ.

```
ssh -i id_rsa navixy@myserver.domain.com
```

После этого вы можете отключить аутентификацию по паролю на вашем сервере.

## Создание SSH‑ключей в Windows

Если вы используете Windows, наиболее распространенным клиентом для подключения к серверу по SSH является **PuTTY**. Существует также множество альтернативных клиентов, но все они по сути служат одной цели, поэтому выбор за вами.

В Windows генерация SSH‑ключей выполняется с помощью утилиты **PuTTYgen** , которая входит в состав установочного пакета PuTTY.

Запустите PuTTYgen из меню «Пуск».

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-477e3c425ac5416d65fb92056a864f049ebe8a58%2Fimage-20240215-124950.png?alt=media)

Убедитесь, что выбран тип ключа `RSA` и нажмите **Generate**.

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-6aac962f348f5cb33771049a00381675f082cd24%2Fimage-20240215-125643.png?alt=media)

В процессе генерации ключа несколько раз перемещайте курсор мыши по окну приложения для создания случайных значений.

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-dfb47ef4fd49eaba7dad09bcce5e5e794ffcd3b2%2Fimage-20240215-125204.png?alt=media)

После завершения создания ключа открытый ключ будет отображен в PuTTYgen, а закрытый ключ будет находиться в памяти приложения. Чтобы сохранить эти ключи, нажмите **Save public key** и **Save private key**. Укажите каталог на вашем ПК для хранения файлов ключей.

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-a2310c827687797ae57c7e94b22fd9f2de9b4231%2Fimage-20240215-133332.png?alt=media)

При сохранении закрытого ключа, если поле `Key passphrase` не заполнено, появится запрос «Are you sure you want to save this key without a passphrase to protect it?». Нажмите `Yes` или вернитесь к предыдущему окну, чтобы указать парольную фразу.

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-5e63b402b4fc3cf8843a476597260cc3a2ca721f%2Fimage-20240215-133546.png?alt=media)

Теперь открытый ключ необходимо скопировать на ваш сервер в `authorized_keys` файл. Он расположен в каталоге пользователя, от имени которого будет выполняться удаленное подключение. Предположим, что имя пользователя — `navixy`, и в этом случае файл будет находиться по адресу `/home/navixy/.ssh/authorized_keys`.

Используйте любой клиент передачи файлов для работы с файлами на удаленном сервере Linux. Здесь мы опишем процесс с использованием **WinSCP** как наиболее популярного клиента.

Откройте `authorized_keys` файл через WinSCP для редактирования.

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-1bcdd4f34b03a4026334ed4a5623f59c81065f63%2Fimage-20240215-140635.png?alt=media)

Скопируйте значение открытого ключа из окна PuTTYgen или из ранее сохраненного файла. Ключ должен начинаться с `ssh-rsa`. Если какой‑то ключ уже сохранен в `authorized_keys` файле, добавьте новый ключ после него, начиная с новой строки.

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-871f245b4f4ce9a9abf3073b89a6bee210f6bdf3%2Fimage-20240215-141101.png?alt=media)

Сохраните файл.

Теперь вы можете подключиться к вашему серверу через PuTTY, используя файл закрытого ключа. Вам нужно указать путь к нему на вашем ПК. Для этого выберите требуемый путь в разделе *Connection - SSH - Auth - Credentials* (новая версия PuTTY) или *Connection - SSH - Auth* (старая версия), в поле *Private key for authentication* .

![](https://4066122344-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkUnMmePH99SsdChtqqu7%2Fuploads%2Fgit-blob-3fb7ba5b02297fd1c989ead8c019ab43df536957%2Fimage-20240215-143917.png?alt=media)

Укажите имя пользователя и адрес сервера (например, `navixy@myserver.domain.com`) на вкладке *Session* и подключитесь к вашему серверу. Если все сделано правильно, соединение будет установлено без необходимости ввода пароля.

## SSH‑ключи в облачных решениях

При развертывании виртуальной машины в облачных сервисах, таких как AWS, MS Azure и аналогичных, вы можете выпустить SSH‑ключ в момент создания машины или добавить существующий ключ, если он уже был создан ранее. При этом облачный сервис автоматически вставит открытый ключ в `authorzed_keys` пользователя на сервере. Все, что вам нужно сделать после развертывания сервера, — установить SSH‑подключение с использованием закрытого ключа.

{% hint style="info" %}
Хотя облачные платформы позволяют создавать SSH‑ключи, они не хранят закрытую часть у себя. Загруженный закрытый ключ необходимо бережно хранить, поскольку в случае утраты доступ к серверу будет невозможен.
{% endhint %}

## Отключение аутентификации по паролю

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

Подключитесь к серверу по SSH и откройте для редактирования файл `sshd_config` , например с помощью редактора Vi:

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

Найдите в файле параметр `PasswordAuthentication` и установите его значение в `no`:

```
PasswordAuthentication no
```

Сохраните файл. Перезапустите службу sshd:

```
systemctl restart sshd
```

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