Введение
SSH-ключи используются для безопасной аутентификации без передачи пароля по сети.
Проще говоря — это способ входить на сервер или подключаться к сервису (например GitHub) без ввода логина и пароля при каждом подключении.
SSH-ключ — это пара файлов, которые создаются одновременно:
- Приватный ключ —
~/.ssh/id_ed25519- хранится только у владельца
- никому не передаётся
- используется для подписи соединения
- Публичный ключ —
~/.ssh/id_ed25519.pub- его можно безопасно передавать
- добавляется в файл authorized_keys на сервере
- добавляется в настройки SSH-ключей в GitHub
В этой статье разберём:
- как создавать SSH-ключи с паролем и без
- как задавать собственное имя файла
- как правильно настраивать файл
~/.ssh/config - как использовать ключи для подключения к VPS и GitHub
- какие права должны быть у ключей
Создание ключей
Базовая команда
1ssh-keygen -t ed25519 -a 200 -C "comment"
Что означает эта команда:
ssh-keygen— утилита для генерации SSH-ключей-t ed25519— тип ключа (рекомендуемый современный алгоритм, быстрый и безопасный)-a 200— количество раундов KDF (усложняет перебор пароля, если он задан)-C "comment"— комментарий к ключу, нужен только для удобства распознавания ключа (например: github_deploy)
Что произойдёт после запуска:
-
Система предложит указать путь для сохранения ключа:
1Enter file in which to save the key (/home/user/.ssh/id_ed25519):Можно:
- нажать Enter — будет использован путь по умолчанию
- задать собственное имя ключа (например для Linux:
~/.ssh/key_name, для WindowsC:\Users\user\.ssh\key_name)
-
Затем система предложит задать passphrase (пароль к ключу):
1 Enter passphrase (empty for no passphrase):Если ключ создаётся для автодеплоя или серверной автоматизации, пароль обычно не используется.
В этом случае достаточно два раза нажать Enter.
Команда с указанием имени файла
В этом примере ключ создаётся с заранее заданным именем файла:
1ssh-keygen -t ed25519 -a 200 -f key_name -C "comment"
Важно: перед выполнением команды терминал уже должен находиться в директории
.ssh.
Linux:
1cd ~/.ssh
Windows (PowerShell):
1cd $env:USERPROFILE\.ssh
После перехода в .ssh можно выполнять команды генерации ключей без указания полного пути к файлу.
Создание конфига
Файл config — это конфигурационный файл клиента SSH.
Он позволяет заранее задать параметры подключения, чтобы не указывать их вручную каждый раз.
Расположение:
- Linux:
~/.ssh/config - Windows:
C:\Users\user\.ssh\config
Если файла нет — его можно создать вручную.
Для чего нужен
Без файла config подключение выглядит так:
1ssh -i ~/.ssh/staging [email protected] -p 22
С config можно упростить до:
1ssh staging
Базовая структура
1Host alias_name
2 HostName 203.0.113.10
3 User username
4 IdentityFile ~/.ssh/key_name
5 Port 22
6 IdentitiesOnly yes
Подключение к VPS
1Host deploy
2 HostName 203.0.113.10
3 User deploy
4 IdentityFile ~/.ssh/deploy
5 IdentitiesOnly yes
6
7Host admin
8 HostName 203.0.113.10
9 User admin
10 IdentityFile ~/.ssh/id_ed25519
11 IdentitiesOnly yes
Подключение:
1ssh deploy
или
1ssh admin
GitHub с конкретным ключом
1Host github.com
2 HostName github.com
3 User git
4 IdentityFile ~/.ssh/github_deploy
5 IdentitiesOnly yes
Использование:
1git clone [email protected]:your-username/your-repository.git
Два разных GitHub аккаунта
1Host github-personal
2 HostName github.com
3 User git
4 IdentityFile ~/.ssh/github_personal
5 IdentitiesOnly yes
6
7Host github-work
8 HostName github.com
9 User git
10 IdentityFile ~/.ssh/github_work
11 IdentitiesOnly yes
Использование:
1git clone git@github-personal:your-username/your-repository.git
или
1git clone git@github-work:your-username/your-repository.git
Права на директорию .ssh и файлы
В Linux SSH требует строгих прав доступа к файлам.
1chmod 700 ~/.ssh
2chmod 600 ~/.ssh/key_name
3chmod 644 ~/.ssh/key_name.pub
4chmod 600 ~/.ssh/config
700— доступ только владельцу600— приватный ключ и файлconfigне должны быть доступны другим пользователям644— публичный ключ можно читать
Если используется authorized_keys:
1chmod 600 ~/.ssh/authorized_keys
Windows обычно выставляет корректные права автоматически.