Инструкции и заметки по работе с OpenSSH client.
Используемые технологии:
- Ubuntu 24.04+ / Debian 12+
- OpenSSH 10
- SSH client инструкции
- Содержание
- Основная информация
- Инструкции
- Генерация ssh-keys
- Комментарий в ssh-keys
- Генерация нового публичного ключа на основе приватного
- Миграция с одной машины на другую
- Копирование публичного ключа на удалённую машину
- Тестирование подключения по протоколу SSH на примере GitHub
- Полезные команды ssh-agent
- Работа со множеством ключе с помощью
config
- Источники
OpenSSH — это пакет или набор программ с открытым исходным кодом для предоставления защищённых соединений, передачи файлов и управления удалёнными машинами.
— файл настройки клиента.
Позволяет настраивать параметры соединений, чтобы не было необходимости каждый раз указывать опции для каждого конкретного сервера.
— файл, который содержит список ключей для хостов, к которым ранее уже было произведено подключение.
Это один из инструментов безопасности.
При первом подключении к серверу вы получаете подпись его ключа доступа, которую в дальнейшем будете использовать для проверки легитимности хоста.
При повторном подключении эти данные позволяют проверить, что это именно тот сервер, к которому вы подключались ранее.
— файлы, которые содержат закрытые ключи доступа.
Закрытые ключи доступа используемые текущим устройством для установки соединения.
Важно!
Эти файлы должны храниться в полной секретности.
— файлы, которые содержат публичные ключи доступа.
Публичные ключи доступа, которые используются для подключения к другим устройствам.
ssh-keys — это пара криптографических ключей (приватный + публичный), используемая для аутентификации по протоколу SSH вместо пароля.
| Тип | Безопасность | Длина | Примечание |
|---|---|---|---|
Ed25519 |
Высокая | 256 бит | Быстрый (рекомендуется) |
RSA |
Хорошая | ≥4096 бит | Широко поддерживается |
ECDSA |
Хорошая | 384 бит | Короче, чем RSA |
ssh-agent — это менеджер ключей для SSH. Он хранит ваши ключи и сертификаты в памяти, незашифрованные и готовые к использованию ssh клиентом.
Особенности:
- Работает в фоновом режиме.
- Избавляет от необходимости вводить пароль каждый раз, когда подключаетесь к серверу.
- Хранит ключи в безопасности.
ssh-keys (например, id_rsa и id_rsa.pub по умолчанию для RSA) используются только при подключении клиента и сервера.
Однако, для шифрования сеанса используются эфимерные и симметричные ключи, генерируемые после проверки ssh-keys.
Когда ssh-agent запускается, он сканирует домашний каталог на наличие стандартных ключей и загружает их. По умолчанию:
~/.ssh/id_rsa~/.ssh/id_ed25519~/.ssh/id_dsa~/.ssh/id_ecdsa
Рекомендуется иметь отдельные ssh-keys для каждого сервера или VM.
Минималистичная команда для генерации нового ssh-keys
ssh-keygen -t rsaПосле запуска команды произодёт переход в интерактивный режим, где необходимо указать доп. данные
# Путь и название файла...
Enter file in which to save the key (/home/alto/.ssh/id_rsa):
# Ввести кодовую фразу...
# Кодовая фраза будет требоваться каждый раз, когда будут производится операции с использованиям этого ключа.
# Например, git fetch / git push и др.
Enter passphrase for "/home/alto/.ssh/id_rsa" (empty for no passphrase):
# Повторите кодовую фразу
Enter same passphrase again:
# Результат
Your identification has been saved in /home/alto/.ssh/id_rsa
Your public key has been saved in /home/alto/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:WPBQCxN05CoxllweG38wCc3AjTO1WPH/7VXj0qO7lIc alto@alto
The key's randomart image is:
+---[RSA 3072]----+
| o&%Xo |
| . +=/=* |
| * +oB o |
| . o + . . |
| . o S . ..|
| . .=.o |
| E.=o |
| . +.o |
| +o .|
+----[SHA256]-----+Важно!
В случае, если SSH-ключ уже существует, вам будет предложено перезаписать его.
В результате должны быть созданы 2 файла:
id_rsa- секретный ключ (как обычный ключ от дверей)id_rsa.pub- публичный ключ (замочная скважина для ключа)
| Флаг | Возможные значения | Описание | Ссылки |
|---|---|---|---|
-t |
rsa / Ed25519 |
Алгоритм для генерации ключа. | Подробнее |
-b |
4096 |
Размер ключа (зависит от алгоритма). | |
-C |
"altheone.official@gmail.com" |
Комментарий. | Подробнее |
-f |
~/.ssh/id_rsa |
Путь для сохранения и название файла. |
Это может быть любой текст.
Обычно в комментарий пишут имя пользователя + хост или email адрес.
В общем случае комментарий зависит от необходимой информации для его эксплуатации, поэтому в комментарий можно включить много полезной информации.
- Место использования
Вы можете указать:
- где используется этот ключ
- для чего он нужен
Например:
github-mainserver-backupremote-office
- Понятность с точки зрения целевой стороны
Вы можете указать:
- что за машина используется ключ
- что за пользователь используется ключ
Например:
altheone@home-desktopaltheone@work-laptop
- Место хранения или резервного копирования ключа
Например:
1PasswordKeyPasspath_to_file
- Ключевые даты ротации
Вы можете указать:
- время создания ключа
- время истечения ключа
Например:
2026-012026-01-0120260101
- Область доступа
Если ключ имеет ограниченные права доступа на целевой стороне, можно указать это.
Например:
readonlyrorw
- Окружение или контекст
Возможно указать окружение, что полезно, если у вас несколько ключей для разных настроек.
Например:
prodteststaging
| Файл ключа | Комментарий |
|---|---|
github-main |
altheone@home-desktop_github-main_1Password_2026-01-01 |
vps-server |
altheone@work-laptop_vps-server_2026-01-01 |
На основе приватного ключа можно создавать неограниченное количество публичных ключей.
Это может быть полезно в случае потери публичного ключа или смены машины.
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pubБывают случаи, когда необходимо мигрировать с одной машины на другую и необходимо перенести ключи.
Ниже инструкция как это сделать.
- Перенесите файлы на другую
id_rsa
Заметка!
Обычно не требуется копироватьid_*.pub, так как можно сгенерировать новый.
Способы переноса:
- используя
scp - используя
catи копирование - используя промежуточное хранилище
- После переноса файлов необходимо правильно установить права
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub| Код прав | Описание |
|---|---|
700 |
rwx только для владельца |
600 |
rw только для владелеца |
644 |
rw только для владелеца / r для остальных |
- Добавить SSH-ключи в текущую сессию
ssh-add ~/.ssh/id_rsaЗаметка!
При перезагрузке ssh-agent загружает ключи с названием по умолчанию (например,id_rsa).
Однако, в случае ключа с нестандартным названием и без публичного ключа необходимо добавлять ключ ssh-agent'у вручную.
Для копирования публичного ключа
ssh-copy-id user@hostЗаметка!
У вас уже должен быть какой-либо доступ к удалённой машине.
Выполните
ssh -T git@github.comПример ответа
Hi AlTheOne! You've successfully authenticated, but GitHub does not provide shell access.Заметка!
Флаг-Tнеобходим, чтобы ssh-client не пытался использовать TTY (терминал).
Тем не менее, можно выполнять команду и без этого флага.
ssh-agentПример ответа
SSH_AUTH_SOCK=/tmp/ssh-IKJmIT2x8kN0/agent.6264; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6265; export SSH_AGENT_PID;
echo Agent pid 6265;
ssh-add -lРезультат
4096 SHA256:A1nO0kcW1ac11fxpeIatZGF/p1Stf1uGtA1lDqaxlS1 user@ubuntu (RSA)Добавить ключ по умолчанию (будет искать в ~/.ssh/)
ssh-addЗаметка!
При запуске ssh-agent автоматически проверяет директорию~/.ssh/и загружает ключи.
Тригером может быть появление публичного ключа.
Добавить конкретный ключ
ssh-add ~/.ssh/id_rsaДобавить конкретный ключ на 3600 секунд (один час)
ssh-add -t 3600 ~/.ssh/id_rsaДобавить все стандартные ключи
ssh-add ~/.ssh/*Удалить конкретный ключ из агента
ssh-add -d ~/.ssh/id_rsaУдалить все ключи
ssh-add -D ~/.ssh/id_rsaЗаметка!
Удаление ключей с названием по умолчанию может фактически не происходить.
Возможно из-за переодических проверок директории~/.ssh.
По моим замечениям: после появления публичного ключаid_*.pubприватный ключ автоматически попадает в ssh-agent.
Когда у вас становится много ключей, то может быть неудобно использовать длинные команды для подключений.
Это можно решить с помощью файла config.
Создайте файл, если его не существует
touch ~/.ssh/configЗаметка!
Не путайте сsshd_config.
sshd_configиспользуется для настроек SSH сервера.
Установите прав
chmod 600 ~/.ssh/configЗаметка!
OpenSSH очень чувствителен к правам на файлы и директории.
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
# Home server
Host home
HostName 192.168.1.1
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_home
# Personal Github
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_personal
IdentitiesOnly yes
# Work GitHub
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
IdentitiesOnly yes
| Параметр | Пример значений | Описание |
|---|---|---|
Host |
* / github-personal |
* - общие настройки для всех серверов. github-personal - Алиас для подключения. |
HostName |
github.com |
Адрес ресурса (IP или домен). |
User |
git |
Пользователь под которм подключаемся. |
IdentityFile |
~/.ssh/id_rsa_personal |
Путь к приватному ключу. |
IdentitiesOnly |
yes / no |
Использовать только ключ, указанный в IdentityFile и не пробовать все ключи подряд. |
ServerAliveInterval |
60 |
Сигнал, что соединение активно. Время в секундах. |
ServerAliveCountMax |
3 |
Максимальное количество попыток отправить сигнал, что соединение активно, если сервер не ответил. |
Теперь вместо длинных команд и ручного выбора ключей вы можете писать короткие команды.
Например, для подключения к удалённой машине
# Было
ssh -i ~/.ssh/id_rsa_home admin@192.168.1.1 -p 2222
# Стало
ssh homeили для работы с Git
# Было
git clone git@github.com:altheone/repo.git
# Стало
git clone git@github-personal:altheone/repo.git