> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.lumiweb.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# SSH-ключи

> Вход по ключу вместо пароля

Вход по ключу надёжнее пароля. Пароль можно подобрать перебором, ключ — практически нельзя: это пара из закрытой и открытой частей. Закрытую часть храни у себя и никому не показывай, открытую кладёшь на сервер. При входе они сверяются автоматически — пароль вводить не нужно.

## Создать ключ и положить на сервер

<Tabs>
  <Tab title="Linux / macOS">
    <Steps>
      <Step title="Сгенерируй ключ">
        В терминале на своём компьютере:

        ```bash theme={"system"}
        ssh-keygen -t ed25519 -C "lumi-vps"
        ```

        На вопрос о пути нажми Enter — ключ ляжет в стандартное место.

        <Tip>
          Задавай ключу passphrase (пароль на сам ключ) — на вопрос при `ssh-keygen` введи фразу, а не оставляй пустым. Тогда даже если закрытый файл украдут, без passphrase им не воспользуются. Чтобы не вводить её каждый раз, добавь ключ в ssh-agent: `ssh-add ~/.ssh/id_ed25519`.
        </Tip>

        Появятся два файла:

        | Файл                    | Что это                                       |
        | ----------------------- | --------------------------------------------- |
        | `~/.ssh/id_ed25519`     | закрытый ключ — держи у себя, никому не давай |
        | `~/.ssh/id_ed25519.pub` | открытый ключ — его кладём на сервер          |
      </Step>

      <Step title="Скопируй открытый ключ на сервер">
        Самый простой способ — `ssh-copy-id`:

        ```bash theme={"system"}
        ssh-copy-id root@IP
        ```

        Замени `IP` на адрес сервера из бота. Команда один раз спросит пароль root и сама допишет ключ на сервер.

        Если `ssh-copy-id` нет, добавь ключ вручную. Покажи свой открытый ключ:

        ```bash theme={"system"}
        cat ~/.ssh/id_ed25519.pub
        ```

        Зайди на сервер по паролю и вставь строку в `~/.ssh/authorized_keys`:

        ```bash theme={"system"}
        ssh root@IP
        mkdir -p ~/.ssh && chmod 700 ~/.ssh
        echo "СЮДА_СТРОКУ_КЛЮЧА" >> ~/.ssh/authorized_keys
        chmod 600 ~/.ssh/authorized_keys
        ```
      </Step>
    </Steps>
  </Tab>

  <Tab title="Windows">
    На Windows 10/11 есть встроенный OpenSSH — можно обойтись без сторонних программ.

    <Steps>
      <Step title="Сгенерируй ключ в PowerShell">
        Открой PowerShell и выполни:

        ```powershell theme={"system"}
        ssh-keygen -t ed25519 -C "lumi-vps"
        ```

        Нажми Enter на вопрос о пути. Ключи лягут в `C:\Users\Имя\.ssh\` — `id_ed25519` (закрытый) и `id_ed25519.pub` (открытый).
      </Step>

      <Step title="Скопируй открытый ключ на сервер">
        Покажи открытый ключ:

        ```powershell theme={"system"}
        type $env:USERPROFILE\.ssh\id_ed25519.pub
        ```

        Зайди на сервер по паролю и добавь строку в `~/.ssh/authorized_keys`:

        ```bash theme={"system"}
        ssh root@IP
        mkdir -p ~/.ssh && chmod 700 ~/.ssh
        echo "СЮДА_СТРОКУ_КЛЮЧА" >> ~/.ssh/authorized_keys
        chmod 600 ~/.ssh/authorized_keys
        ```
      </Step>
    </Steps>

    <Note>
      Если пользуешься PuTTY, ключ создаётся через **PuTTYgen**: выбери тип `EdDSA` (Ed25519), нажми **Generate**, сохрани закрытый ключ кнопкой **Save private key** (файл `.ppk`). Строку из поля сверху окна вставь на сервер в `~/.ssh/authorized_keys`. В самом PuTTY путь к ключу указывается в **Connection → SSH → Auth → Credentials → Private key file**.
    </Note>
  </Tab>
</Tabs>

## Проверь вход по ключу

Подключись заново:

```bash theme={"system"}
ssh root@IP
```

Если зашло без запроса пароля сервера — ключ работает. (Если ты задал passphrase, спросят именно её — это пароль от ключа на твоём компьютере, а не от сервера.)

## Отключить вход по паролю

Когда ключ работает, пароль можно выключить совсем — тогда сервер перестанут долбить переборщики.

<Warning>
  Сначала убедись, что вход по ключу действительно работает. Если выключить пароль раньше, можно закрыть себе доступ к серверу.
</Warning>

<Steps>
  <Step title="Открой настройки SSH на сервере">
    ```bash theme={"system"}
    nano /etc/ssh/sshd_config
    ```
  </Step>

  <Step title="Запрети вход по паролю">
    Найди строку `PasswordAuthentication` и приведи к виду (убери `#` в начале, если он есть):

    ```
    PasswordAuthentication no
    ```

    Сохрани файл: в nano это `Ctrl+O`, Enter, затем `Ctrl+X`.
  </Step>

  <Step title="Перезапусти SSH">
    ```bash theme={"system"}
    systemctl restart ssh
    ```

    Текущее соединение не разорвётся. Открой **второе** окно и проверь, что вход по ключу всё ещё работает, прежде чем закрывать первое.
  </Step>
</Steps>

## Куда дальше

<CardGroup cols={2}>
  <Card title="Защита сервера" icon="lock" href="/vps/hardening">
    Чек-лист безопасности после первого входа.
  </Card>

  <Card title="Файрвол" icon="shield-halved" href="/vps/firewall">
    Закрой лишние порты, оставь только нужные.
  </Card>
</CardGroup>
