Skip to content

AlTheOne/ssh-client-handbook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

SSH client инструкции

Инструкции и заметки по работе с OpenSSH client.

Используемые технологии:

  • Ubuntu 24.04+ / Debian 12+
  • OpenSSH 10

Содержание


Основная информация

OpenSSH

Описание

OpenSSH — это пакет или набор программ с открытым исходным кодом для предоставления защищённых соединений, передачи файлов и управления удалёнными машинами.

Пользовательские файлы

config

— файл настройки клиента.

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

known_hosts

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

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

id_*

— файлы, которые содержат закрытые ключи доступа.

Закрытые ключи доступа используемые текущим устройством для установки соединения.

Важно!
Эти файлы должны храниться в полной секретности.

id_*.pub

— файлы, которые содержат публичные ключи доступа.

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

ssh-keys

Описание

ssh-keys — это пара криптографических ключей (приватный + публичный), используемая для аутентификации по протоколу SSH вместо пароля.

Алгоритмы

Тип Безопасность Длина Примечание
Ed25519 Высокая 256 бит Быстрый (рекомендуется)
RSA Хорошая ≥4096 бит Широко поддерживается
ECDSA Хорошая 384 бит Короче, чем RSA

ssh-agent

Описание

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

Описание

Рекомендуется иметь отдельные 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 - публичный ключ (замочная скважина для ключа)

Флаги команды для генерации SHH-ключей

Флаг Возможные значения Описание Ссылки
-t rsa / Ed25519 Алгоритм для генерации ключа. Подробнее
-b 4096 Размер ключа (зависит от алгоритма).
-C "altheone.official@gmail.com" Комментарий. Подробнее
-f ~/.ssh/id_rsa Путь для сохранения и название файла.

Комментарий в ssh-keys

Описание

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

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

Что можно включить в комментарий

  1. Место использования

Вы можете указать:

  • где используется этот ключ
  • для чего он нужен

Например:

  • github-main
  • server-backup
  • remote-office
  1. Понятность с точки зрения целевой стороны

Вы можете указать:

  • что за машина используется ключ
  • что за пользователь используется ключ

Например:

  • altheone@home-desktop
  • altheone@work-laptop
  1. Место хранения или резервного копирования ключа

Например:

  • 1Password
  • KeyPass
  • path_to_file
  1. Ключевые даты ротации

Вы можете указать:

  • время создания ключа
  • время истечения ключа

Например:

  • 2026-01
  • 2026-01-01
  • 20260101
  1. Область доступа

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

Например:

  • readonly
  • ro
  • rw
  1. Окружение или контекст

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

Например:

  • prod
  • test
  • staging

Пример

Файл ключа Комментарий
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

Миграция с одной машины на другую

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

  1. Перенесите файлы на другую id_rsa

Заметка!
Обычно не требуется копировать id_*.pub, так как можно сгенерировать новый.

Способы переноса:

  • используя scp
  • используя cat и копирование
  • используя промежуточное хранилище
  1. После переноса файлов необходимо правильно установить права
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
Код прав Описание
700 rwx только для владельца
600 rw только для владелеца
644 rw только для владелеца / r для остальных
  1. Добавить SSH-ключи в текущую сессию
ssh-add ~/.ssh/id_rsa

Заметка!
При перезагрузке ssh-agent загружает ключи с названием по умолчанию (например, id_rsa).
Однако, в случае ключа с нестандартным названием и без публичного ключа необходимо добавлять ключ ssh-agent'у вручную.

Копирование публичного ключа на удалённую машину

Для копирования публичного ключа

ssh-copy-id user@host

Заметка!
У вас уже должен быть какой-либо доступ к удалённой машине.

Тестирование подключения по протоколу SSH на примере GitHub

Выполните

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-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-agent'а

Добавить ключ по умолчанию (будет искать в ~/.ssh/)

ssh-add

Заметка!
При запуске ssh-agent автоматически проверяет директорию ~/.ssh/ и загружает ключи.
Тригером может быть появление публичного ключа.

Добавить конкретный ключ

ssh-add ~/.ssh/id_rsa

Добавить конкретный ключ на 3600 секунд (один час)

ssh-add -t 3600 ~/.ssh/id_rsa

Добавить все стандартные ключи

ssh-add ~/.ssh/*

Удаление ssh-ключей из ssh-agent

Удалить конкретный ключ из агента

ssh-add -d ~/.ssh/id_rsa

Удалить все ключи

ssh-add -D ~/.ssh/id_rsa

Заметка!
Удаление ключей с названием по умолчанию может фактически не происходить.
Возможно из-за переодических проверок директории ~/.ssh.
По моим замечениям: после появления публичного ключа id_*.pub приватный ключ автоматически попадает в ssh-agent.

Работа со множеством ключе с помощью config

Когда у вас становится много ключей, то может быть неудобно использовать длинные команды для подключений.
Это можно решить с помощью файла config.

Создание файла config для клиента

Создайте файл, если его не существует

touch ~/.ssh/config

Заметка!
Не путайте с sshd_config.
sshd_config используется для настроек SSH сервера.

Установите прав

chmod 600 ~/.ssh/config

Заметка!
OpenSSH очень чувствителен к правам на файлы и директории.

Описание файла config

Пример
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

Источники

About

SSH Client Handbook

Topics

Resources

Stars

Watchers

Forks