---
title: "🔐 Авторизация SSH по ключам"
date: 2022-09-24T10:13:30+03:00
lastmod: 2023-02-06T11:11:00+03:00
draft: false
tags: [ssh, tips, privacy]
---

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

Для генерации ключа на локальной машине необходимо выполнить команду `ssh-keygen`:

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

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

В моём случае я указал путь и имя ключа `kvm`:

```text
/home/user/.ssh/kvm
```

Далее необходимо дважды ввести пароль для ключа:

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

После этого ключ будет создан,
а в директории `~/.ssh` появится два файла: `kvm` и `kvm.pub`.

```text
The key's randomart image is:
+---[RSA 3072]----+
|       ..        |
+----[SHA256]-----+
```

- `kvm` — секретный ключ
- `kvm.pub` — публичный ключ

## Шаг второй - копирование публичного ключа на удалённую машину

Выполняем команду:

```sh
ssh-copy-id -i ~/.ssh/kvm <username>@<remotehost>
```

и вводим пароль от `username`:

```text
username@remotehost's password:
```

Если всё сделано верно, программа вернёт следующий ответ:

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

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

Готово.

Можно ещё создать файл `~/.ssh/config`, чтобы задать алиасы, а также другие настройки.  
Например можно указать имя пользователя и путь к ключу.

```text
Host github.com
  User iiiypuk
  IdentityFile /home/user/.ssh/github

Host remote_host
  User alex
  HostName 0.0.0.0
  IdentityFile /home/user/.ssh/kvm
  ServerAliveInterval 59
```

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

```text
$ ssh remotehost
```

## Установка ключа вручную

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

На удаленной машине необходимо добавить содержимое локального файла `kvm.pub`
в файл `~/.ssh/authorized_keys` на сервере.

```sh
echo public_key_string >> ~/.ssh/authorized_keys
```
