# Г. Подключение к серверу по SSH-ключам

### Общие положения

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

Организация доступа с помощью **SSH-ключей** на локальных машинах под управлением **Windows** реализуется с помощью утилит **puttygen** и **pageant**, последние версии которых можно скачать по адресу [https://www.chiark.greenend.org.uk/\~sgtatham/putty/latest.html](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html).

### Генерация SSH-ключей

Первым шагом нужно создать сами SSH-ключи с помощью утилиты **puttygen**, внешний вид которой представлен на следующем рисунке:

![](https://640371188-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lbn4ETTWljOikkGTsy5%2F-LcZNerYKvEiyiSyvJ7i%2F-LcZOSWfs6ZFa-nNtPUu%2Fputtygen.png?alt=media\&token=92362ae1-e9ab-48e1-b1e1-2c3c5ef0e1ab)

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

![](https://640371188-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lbn4ETTWljOikkGTsy5%2F-LcZNerYKvEiyiSyvJ7i%2F-LcZP5w1-BZtEJUuOi-M%2Fputtygen_generate.png?alt=media\&token=47178d63-1471-4b55-94d4-d67fd23b19ce)

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

![](https://640371188-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lbn4ETTWljOikkGTsy5%2F-LcZNerYKvEiyiSyvJ7i%2F-LcZQY8143Vqb8umXt-0%2Fputtygen_pass.png?alt=media\&token=751ed94f-67ab-4852-8edf-cd3f8b49a914)

Заключительным шагом в создании **SSH-ключей** является их сохранение на жесткий диск. Так как отрытый и закрытый ключи используются по разному, поэтому для их сохранения предусмотрены разные кнопки. **Открытый ключ** можно сохранить **в любом удобном месте**. **Закрытый ключ** нужно сохранять только в **защищенном месте**, например в зашифрованном контейнере на жестком диске (но это только рекомендация).&#x20;

Имя сохраняемым ключам можно давать любые. Рекомендуется давать SSH-ключам осознанные имена, например, **vasya2019**. Открытый ключ можно сохранить с именем без расширения, закрытому же ключу нужно вручную добавить расширение **.ppk**.&#x20;

### Регистрация отрытого SSH-ключа на сервере

Для регистрации открытого ключа его первоначально нужно скопировать на сервер в домашний каталог пользователя. Копировать можно любыми утилитами, в том числе **psftp.exe**, входящей в пакет утилит **putty**. Но лучше всего воспользоваться программой **WinSCP**, имеющей привычный и удобный интерфейс:

![](https://640371188-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lbn4ETTWljOikkGTsy5%2F-LcZNerYKvEiyiSyvJ7i%2F-LcZYVaUE5z3fBFrZkzu%2Fwinscp.png?alt=media\&token=3a911d10-702b-486a-b6a4-18e64405c122)

В приведенном примере скопирован открытый ключ **vasya2019** из локальной папки **с:\utul** на удаленный сервер в домашний каталог **/home/jetcalc/** пользователя **jetcalc**.

Далее необходимо зайти на сервер с помощью **putty** (пока еще по логину и паролю) и зарегистрировать скопированный SSH-ключ с помощью следующей команды:

```
ssh-keygen -i -f vasya2019 >> .ssh/authorized_keys 
```

Смысл этой команды заключается в добавление содержимого открытого ключа **vasya2019** в конец файла **\~/.ssh/authorized\_keys**. Если такого файла еще нет, то он будет создан. Если в домашнем каталоге нет папки **\~/.ssh**, то ее нужно предварительно создать с помощью **Midnight Commander** или выполнив команду:

```
cd ~
mkdir .ssh
```

На этом регистрация открытого ключа **vasya2019** для пользователя **jetcalc** завершена.&#x20;

### Использование закрытого SSH-ключа на локальной машине

Удобнее всего на локальной машине использовать закрытые SSH-ключи с помощью утилиты **pageant**, внешний вид которой представлен на следующем рисунке:

![](https://640371188-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lbn4ETTWljOikkGTsy5%2F-LcZNerYKvEiyiSyvJ7i%2F-LcZbyIL3gZvhuXZMndm%2Fpageant.png?alt=media\&token=5f766c63-b6b0-4bbe-b1f8-c7cfad8cfe89)

После запуска утилиты нужно выбрать пункт меню **Add Key**, либо двойным щелчком мыши вызвать окно со списком ключей и уже в нем щелкнуть по кнопке **Add Key**. В обоих случаях откроется диалог выбора файла, в котором нужно выбрать закрытый SSH-ключ. После выбора ключа потребуется ввести кодовую фразу, если она была задана при создании ключа.&#x20;

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

```
login as: jetcalc
Authenticating with public key "vasya2019" from agent
```

### Дополнительные материалы

* [https://helpdesk.infobox.ru/Knowledgebase/Article/View/581/90/](https://helpdesk.infobox.ru/Knowledgebase/Article/View/581/90/)

