SSH ключі в Windows: генерація, використання і захист

6 хв читання

Як генерувати SSH ключі в Windows, додавати їх на сервери, використовувати ssh-agent для автоматичної автентифікації і захищати приватний ключ паролем.

SSH ключі — безпечніша альтернатива паролям для підключення до серверів. Один раз налаштував — більше не вводиш пароль, але захист значно вищий.


Генерація ключової пари

# Сучасний алгоритм ED25519 (рекомендовано)
ssh-keygen -t ed25519 -C "work-laptop-2026"

# Або RSA 4096 якщо сервер не підтримує ed25519
ssh-keygen -t rsa -b 4096 -C "work-laptop-2026"

При генерації:

  • Шлях — натисни Enter (збереже в ~/.ssh/id_ed25519)
  • Passphrase — введи надійний пароль для захисту ключа. Якщо не вводити — ключ незахищений.

Результат:

  • ~/.ssh/id_ed25519приватний ключ (нікому не давати)
  • ~/.ssh/id_ed25519.pub — публічний ключ (додається на сервери)

Переглянути публічний ключ

Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub"

# Або скопіювати в буфер
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | Set-Clipboard

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

Linux/macOS сервер:

# З Windows — через ssh-copy-id (потрібен OpenSSH клієнт)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server-ip

# Або вручну
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Windows сервер з OpenSSH:

Детальніше: OpenSSH сервер на Windows


Налаштувати ssh-agent для автоматичної автентифікації

ssh-agent зберігає розшифрований ключ у пам'яті — не потрібно вводити passphrase при кожному підключенні.

# Запустити ssh-agent і додати в автозапуск
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agent

# Додати ключ до агента
ssh-add "$env:USERPROFILE\.ssh\id_ed25519"
# Введи passphrase один раз

# Перевірити що ключ додано
ssh-add -l

Файл конфігурації SSH (~/.ssh/config)

Дозволяє налаштувати різні параметри для різних хостів.

Host production
    HostName 192.168.1.100
    User admin
    IdentityFile ~/.ssh/id_ed25519
    Port 2222

Host staging
    HostName 192.168.1.200
    User deploy
    IdentityFile ~/.ssh/id_rsa_staging

Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github

Тепер підключення: ssh production замість ssh admin@192.168.1.100 -p 2222.


Декілька ключів для різних цілей

# Ключ для роботи
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_work" -C "work"

# Ключ для GitHub
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_github" -C "github"

# Ключ для особистих серверів
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_personal" -C "personal"

Захист ключів

Права доступу — приватний ключ має бути доступний тільки тобі:

# Встановити правильні права на приватний ключ
$keyPath = "$env:USERPROFILE\.ssh\id_ed25519"
$acl = Get-Acl $keyPath

# Прибрати успадковані права
$acl.SetAccessRuleProtection($true, $false)

# Залишити тільки поточного користувача
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    $env:USERNAME, "FullControl", "Allow"
)
$acl.SetAccessRule($rule)
Set-Acl $keyPath $acl

Ніколи:

  • Не відправляй приватний ключ по email або месенджеру
  • Не зберігай без passphrase якщо ключ має доступ до важливих серверів
  • Не комітай у Git репозиторій

Ротація ключів

Якщо ключ міг бути скомпрометований:

# Згенерувати новий ключ
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_ed25519_new" -C "rotated-2026"

# Додати новий ключ на всі сервери
# Видалити старий з authorized_keys на серверах
# Видалити старий локально
Remove-Item "$env:USERPROFILE\.ssh\id_ed25519"
Remove-Item "$env:USERPROFILE\.ssh\id_ed25519.pub"

Підсумок

ssh-keygen -t ed25519 → додай публічний ключ на сервери → налаштуй ~/.ssh/config для зручності → запусти ssh-agent щоб не вводити passphrase кожного разу. Приватний ключ — завжди з passphrase і ніколи нікому.


🛡️ Перевір безпеку свого ПК

Хочеш знати чи немає витоків даних, зайвих служб або підозрілих програм на твоєму ПК?

→ AuditShield — аудит Windows по 22 напрямках за 10 хвилин. HTML-звіт з оцінкою ризику. Є безкоштовне демо.

Схожі статті

← Всі статті