# SSH keys installation

**SSH (Secure Shell)** — это защищённый протокол для доступа к инструментам администрирования сервера. Доступ к SSH осуществляется по логину и паролю. Но если Вы часто пользуетесь SSH, то каждый раз вводить логин и пароль будет крайне неудобно.

Для того, чтобы можно было избежать ввода логина и пароля при каждом входе используются ключи доступа.  Помимо того, что это просто удобно, это ещё и очень безопасно, так как Вы можете запретить вход по логину и паролю вовсе.

**Создание пару ключей RSA**

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

```bash
ssh-keygen
```

По умолчанию, `ssh-keygen` создаст пару 2048-битных ключей. Вы можете также создать и 4096-битные ключи, что более безопасно, добавив к команде флаг `-b 4096`.

После ввода и запуска команды Вы увидите нечто вроде:

```
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
```

Нажмите **`ENTER`** для сохранения пары ключей в папку `.ssh` Вашей домашней директории.

Если Вы уже создавали ключи ранее, то программа попросит Вас подтвердить их перезапись:

```
/root/.ssh/id_rsa already exists.
Overwrite (y/n)?
```

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

Далее программа попросит Вас ввести кодовую фразу:

```
Enter passphrase (empty for no passphrase):
```

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

После того, как пара ключей будет создана, Вы увидите нечто вроде этого:

```
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote-host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+
```

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

**Копирование публичного ключа на сервер**

Далее намн ужно скопировать полученный публичный ключ на сервер, куда Вы планируете входить с помощью этих ключей.

Для этого существует утилита `ssh-copy-id`, которая сделает всю работу. Если у Вас нет этой утилиты, Вы можете скопировать файлы вручную.

Для копирования ключей с помощью `ssh-copy-id`введите следующую команду:

```bash
ssh-copy-id username@remote-host
```

Вы увидите нечто вроде этого:

```
The authenticity of host '1.2.3.4 (1.2.4.4)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
```

Это означает, что Ваш локальный компьютер пока ещё не опознаёт удалённый сервер. Это происходит при каждом первом подключении к новому удалённому серверу. Просто введите `yes` и нажмите ENTER.

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

```
username@1.2.3.4's password:
```

Введите пароль и нажмите ENTER. Обратите внимание на то, что при вводе Вы не будете видеть вводимый пароль на экране. Поэтому просто введите пароль и не беспокойтесь о том, что Вы его не видите.

Далее утилита подключится к удалённому серверу и скопирует на него публичный ключ. Копирование как правило производится в директорию `~/.ssh`, в файл `authorized_keys`.

После завершения копирования Вы увидите следующее:

```
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@1.2.3.4'"
and check to make sure that only the key(s) you wanted were added.
```

**Подключение к серверу с помощью ключей**

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

Если Вы используете в качестве ОС Linux, то просто введите `ssh username@remote-host` и далее система сама найдёт Ваш приватный ключ и использует его для подключения.

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

**Отключение входа по паролю**

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

Перед тем как отключать доступ по паролю, убедитесь, что созданные Вами ключи работают. Если Вы отключите доступ по паролю и не будете иметь работающие ключи, восстановить доступ будет крайне затруднительно.

Чтобы отключить доступ по паролю потребуется изменить параметр в файле конфигурации SSH-сервера.

Для этого откройте через любимый редактор (nano, mcedit, vim) файл `/etc/ssh/sshd_config`:

```bash
nano /etc/ssh/sshd_config
```

В файле найдите строку `PasswordAuthentication`. Введите после неё `no`. Должно получиться так:

{% code title="/etc/ssh/sshd\_config" %}

```
PasswordAuthentication no
```

{% endcode %}

Если строка закомментирована (перед ней стоит символ `#`), то удалите этот символ.

Далее сохраните изменения в файле и перезапустите SSH-сервер:

```bash
systemctl restart sshd.service
```

Теперь доступ по паролю без ключей невозможен.


---

# 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://help.vdsnow.ru/english/tutorials/vds-configuration/ssh-keys-installation.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.
