# Добавление SSH-ключей на сайт

Source: https://support.kapsulehost.com/ru-ru/adding-ssh-keys

SSH доступ к сайту KapsuleHost только по ключу, поэтому перед тем как открыть оболочку или SFTP-сессию, нужно зарегистрировать публичный ключ для сайта в KPanel. В этом руководстве описано, где находится эта страница, как добавить уже имеющийся ключ, как поручить KapsuleHost сгенерировать его за вас, и как отозвать ключ, которому вы больше не доверяете.

## Где находится страница SSH-ключей

Откройте раздел **Веб-сайты**, выберите сайт, затем откройте группу **Параметры** в левом меню сайта и выберите **SSH-ключи**. Страница называется **SSH доступ** и содержит две вещи: данные для подключения к этому сайту и список публичных ключей, которым в данный момент разрешено их использовать.

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

![Страница SSH доступа для сайта в KPanel с данными для подключения и списком авторизованных публичных ключей](https://support.kapsulehost.com/help/screenshots/adding-ssh-keys.2a53d172.webp)

> **Note:** Для добавления или отзыва ключа требуется разрешение **sites:write**. Если у вас командный аккаунт с ролью только для чтения, кнопка **Добавить ключ** и значок отзыва скрыты. Попросите владельца аккаунта или администратора внести изменение.

## Данные для подключения

Карточка **Данные для подключения** в верхней части страницы показывает всё, что нужно вашему клиенту:

| Поле | Что это |
|---|---|
| Host | Имя хоста для подключения |
| Port | Порт SSH для этого сайта |
| Username | Системный пользователь, от имени которого работает сайт |
| SSH | Готовая команда `ssh` для этого сайта |
| SFTP | Готовая команда `sftp` для этого сайта |

У каждой строки есть элемент копирования, причём строки SSH и SFTP копируют всю команду целиком, а не только значение, так что можно сразу вставить её в терминал. Используйте именно их, а не набирайте команду вручную: в них уже указаны правильные пользователь, хост и порт.

Если карточка вообще не отображается, значит у сайта ещё не завершено создание пользователя оболочки. В этом случае API возвращает обычную ошибку **Сайт не имеет SSH пользователя**. Дождитесь, пока индикатор состояния сайта не покажет **Active**, и обновите страницу.

## Добавление уже имеющегося ключа

У большинства людей уже есть пара ключей на своём компьютере. Добавьте сюда публичную половину.

1. На своём компьютере выведите на экран публичный ключ. В macOS и Linux это обычно `cat ~/.ssh/id_ed25519.pub`, либо `cat ~/.ssh/id_rsa.pub` для более старого ключа RSA. В Windows с OpenSSH это `type %USERPROFILE%\.ssh\id_ed25519.pub`.
2. Скопируйте всю строку целиком, начинающуюся с `ssh-ed25519`, `ssh-rsa` или `ecdsa-sha2-nistp256`.
3. В KPanel нажмите **Добавить ключ**.
4. Введите в поле **Label** что-нибудь запоминающееся, например название машины, на которой хранится ключ.
5. Вставьте публичный ключ во второе поле.
6. Нажмите **Добавить ключ**.

Ключ сразу же появится в списке **Authorised keys**, с отпечатком под меткой. Подключиться можно немедленно.

KapsuleHost также отправляет письмо на адрес аккаунта при каждом добавлении ключа, указывая метку, отпечаток и сайт. Это сделано намеренно: SSH доступ требует высокого доверия, поэтому если появляется ключ, который вы не добавляли, отзовите его и сразу же смените пароль.

> **Warning:** Вставляйте только файл `.pub`. Файл приватного ключа не имеет расширения `.pub` и начинается со строки вида `-----BEGIN OPENSSH PRIVATE KEY-----`. Если вы вставили именно его, значит это ваш приватный ключ, и его нужно сгенерировать заново, а не использовать повторно.

### Если у вас ещё нет ключа

Сгенерируйте его локально с помощью `ssh-keygen -t ed25519 -C "your-label"`, примите расположение файла по умолчанию и задайте пароль-фразу при запросе. В результате получится `~/.ssh/id_ed25519` (храните его в тайне) и `~/.ssh/id_ed25519.pub` (вставьте именно его).

## Поручить KapsuleHost сгенерировать пару ключей

Если вы не хотите запускать `ssh-keygen`, KPanel может создать пару за вас.

1. Нажмите **Добавить ключ**.
2. Заполните поле **Label**. Поле публичного ключа оставьте пустым.
3. Нажмите **Создать пару ключей**.

KapsuleHost создаёт пару Ed25519, устанавливает публичную половину для сайта и показывает зелёный баннер: **Пара ключей создана: загрузите приватный ключ сейчас**. Нажмите **Загрузить .pem**, чтобы сохранить приватный ключ. Файл будет назван по выбранной вами метке.

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

У сгенерированного ключа нет пароля-фразы, что и позволяет использовать его из скрипта без запроса. Это также означает, что сам файл является единственным удостоверением доступа. Если вам нужен пароль-фраза, сгенерируйте пару самостоятельно с помощью `ssh-keygen` и вставьте публичную половину.

После скачивания переместите файл в подходящее место и ужесточите права доступа к нему, поскольку SSH отказывается использовать приватный ключ, доступный для чтения всем:

```sh
mv ~/Downloads/my-laptop_id_ed25519.pem ~/.ssh/kapsule-mysite.pem
chmod 600 ~/.ssh/kapsule-mysite.pem
ssh -i ~/.ssh/kapsule-mysite.pem <username>@<host> -p <port>
```

Подставьте имя пользователя, хост и порт из карточки **Данные для подключения**.

## Чтение списка авторизованных ключей

Каждая строка в **Authorised keys** показывает:

- Метку, которую вы дали ключу.
- Отпечаток ключа, по которому можно отличить два похожих ключа друг от друга.
- **Added** с датой регистрации.
- **Последнее использование** с датой последней аутентификации, либо **Ни разу не использовался**, если ключ ещё ни разу не использовался.

Столбец **Последнее использование** особенно полезен при чистке списка. Ключ, который никогда не использовался или не использовался уже несколько месяцев, обычно относится к заменённому ноутбуку или подрядчику, который уже не работает с вами.

## Отзыв ключа

Нажмите на красный значок корзины в строке ключа. KPanel попросит подтвердить действие сообщением **Отозвать SSH ключ?** с примечанием, что ключ больше не будет работать для этого сайта. Нажмите **Revoke**, чтобы завершить.

Отзыв действует на новые подключения. Уже открытая SSH-сессия не завершается при отзыве ключа, поэтому если вы убираете доступ у человека, который, возможно, всё ещё подключён, отзовите ключ, а затем смените всё, до чего он мог добраться: пароли баз данных, секреты приложений и любые токены, хранящиеся на сайте.

> **Tip:** Держите список ключей коротким. Один ключ на машину, с меткой с именем машины, проверять гораздо проще, чем кучу ключей с названиями вроде "key1", "new key" и "temp".

## Устранение неполадок

**Permission denied (publickey).** Самая частая причина: ваш клиент предлагает серверу не тот ключ, который вы зарегистрировали. Принудительно укажите нужный ключ с помощью `ssh -i /path/to/private_key ...`, либо проверьте с помощью `ssh -v`, какие ключи предлагаются.

**Connection refused или тайм-аут.** Убедитесь, что вы используете порт, указанный в **Данные для подключения**, а не порт по умолчанию 22. Копируйте команду SSH прямо со страницы, а не набирайте её вручную.

**Bad permissions на приватном ключе.** OpenSSH отказывается использовать приватный ключ, который могут читать другие пользователи. Выполните `chmod 600` для этого файла.

**Ключ работает для SSH, но не для SFTP.** Они используют одни и те же учётные данные, поэтому дело почти всегда в клиенте, а не в ключе. Используйте команду SFTP, скопированную со страницы: в ней уже указан правильный порт.

## Что дальше

- [Загрузка файлов через SFTP](https://support.kapsulehost.com/ru-ru/sftp-access) описывает передачу файлов с использованием тех же учётных данных.
- [Подключение к вашей базе данных через SSH-туннель](https://support.kapsulehost.com/ru-ru/database-ssh-tunnel) использует только что добавленный ключ для доступа к MySQL из настольного клиента.
- [Журнал активности сайта](https://support.kapsulehost.com/ru-ru/site-activity-log) фиксирует каждый добавленный ключ, так что позже можно проверить, кто и когда что добавил.
