SSH ключі¶
Час: ~10 хвилин
Рівень: Початківець
Потрібно: Комп'ютер з терміналом
Що отримаємо¶
SSH ключову пару для безпечного доступу до серверів без пароля.
┌──────────────┐ ┌──────────────┐
│ Ваш ПК │ │ Сервер │
│ │ │ │
│ id_ed25519 │───── SSH ─────────►│ authorized │
│ (приватний) │ │ _keys │
│ │ │ (публічний) │
└──────────────┘ └──────────────┘
Передумови¶
- [ ] Комп'ютер з Linux, macOS або Windows (з OpenSSH)
- [ ] Доступ до терміналу
Крок 1: Перевірка існуючих ключів¶
ls -la ~/.ssh/
Якщо бачите id_ed25519 або id_rsa — ключі вже є.
Крок 2: Генерація ключа¶
Рекомендований: Ed25519¶
ssh-keygen -t ed25519 -C "your@email.com"
Альтернатива: RSA (для старих систем)¶
ssh-keygen -t rsa -b 4096 -C "your@email.com"
Процес генерації:¶
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [введіть пароль]
Enter same passphrase again: [повторіть]
Passphrase — додатковий захист ключа. Рекомендується використовувати.
Результат:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
Крок 3: Перегляд публічного ключа¶
cat ~/.ssh/id_ed25519.pub
Результат:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... your@email.com
Цей рядок потрібно додати на сервер.
Крок 4: Копіювання ключа на сервер¶
Автоматично (ssh-copy-id)¶
ssh-copy-id user@server
Введіть пароль користувача сервера. Ключ буде додано автоматично.
Вручну¶
- Скопіюйте публічний ключ:
cat ~/.ssh/id_ed25519.pub
- На сервері:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# Вставте ключ на новий рядок
chmod 600 ~/.ssh/authorized_keys
Крок 5: Тестування підключення¶
ssh user@server
Має підключитись без запиту пароля сервера (тільки passphrase ключа, якщо встановлено).
Крок 6: Налаштування ~/.ssh/config¶
Створіть конфігураційний файл для зручності:
nano ~/.ssh/config
Вміст:
# Сервер 1
Host myserver
HostName 192.168.1.100
User admin
IdentityFile ~/.ssh/id_ed25519
# Сервер 2 з нестандартним портом
Host webserver
HostName web.example.com
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
# Всі сервери
Host *
AddKeysToAgent yes
IdentitiesOnly yes
Тепер можна підключатись простіше:
ssh myserver
# замість
ssh -i ~/.ssh/id_ed25519 admin@192.168.1.100
Крок 7: SSH Agent¶
SSH agent зберігає розшифровані ключі в пам'яті:
Запуск agent¶
eval "$(ssh-agent -s)"
Додавання ключа¶
ssh-add ~/.ssh/id_ed25519
Введіть passphrase один раз — далі agent використовуватиме ключ автоматично.
Перегляд доданих ключів¶
ssh-add -l
Автозапуск agent¶
Додайте в ~/.bashrc або ~/.zshrc:
# Start SSH agent
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519 2>/dev/null
fi
Крок 8: Безпека ключа¶
Права доступу¶
# Директорія
chmod 700 ~/.ssh
# Приватний ключ
chmod 600 ~/.ssh/id_ed25519
# Публічний ключ
chmod 644 ~/.ssh/id_ed25519.pub
# authorized_keys
chmod 600 ~/.ssh/authorized_keys
Резервне копіювання¶
Зробіть backup приватного ключа! Зберігайте в безпечному місці:
- Password manager
- Encrypted USB drive
- Зашифрований хмарний storage
Windows: особливості¶
PowerShell¶
SSH вбудований в Windows 10/11:
ssh-keygen -t ed25519 -C "your@email.com"
Ключі зберігаються в C:\Users\YourName\.ssh\
PuTTY¶
- Запустіть PuTTYgen
- Виберіть Ed25519 або RSA 4096
- Натисніть Generate
- Збережіть приватний ключ (.ppk)
- Скопіюйте публічний ключ
Типові проблеми¶
Permission denied (publickey)¶
Симптоми: Сервер не приймає ключ
Рішення:
1. Перевірте права доступу:
bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
2. Перевірте що ключ доданий в authorized_keys
3. Перевірте логи: sudo tail /var/log/auth.log
Agent не працює¶
Симптоми: Постійно питає passphrase
Рішення:
# Перезапустіть agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Неправильний ключ¶
Симптоми: Too many authentication failures
Рішення:
# Вказати конкретний ключ
ssh -i ~/.ssh/id_ed25519 user@server
# Або в config
IdentitiesOnly yes
Наступні кроки¶
- VPS налаштування — використання ключів
- Hardening — безпека сервера
Див. також¶
Шлях: step-by-step/ssh-keys-setup.md