SSH-ключі: як створити і використовувати SSH-ключ
Як працює вхід за SSH-ключем, як створити ключ Ed25519 у Windows, macOS і Linux, додати його на сервер чи GitHub і виправити Permission denied (publickey).
SSH-ключі — стандартний спосіб заходити на сервери, надсилати код на GitHub чи GitLab і безпечно копіювати файли без введення пароля. Замість секрету, який знаєте і ви, і сервер, у вас є приватний ключ, а на сервері — відповідний публічний. У цій статті — як працює вхід за SSH-ключем, як створити пару ключів у Windows, macOS і Linux, як додати ключ на сервер і через які помилки найчастіше виникає «Permission denied (publickey)».
Що таке SSH-ключі
SSH (Secure Shell) — протокол для виконання команд на віддаленому комп’ютері через шифроване з’єднання. Він підтримує паролі, але паролі можна підібрати, виманити фішингом або використати повторно. Пара SSH-ключів замінює пароль двома файлами:
- Приватний ключ, наприклад
~/.ssh/id_ed25519. Лишається на вашому комп’ютері, ним ніколи не діляться. - Публічний ключ, наприклад
~/.ssh/id_ed25519.pub. Його копіюють на кожен сервер чи сервіс, куди потрібен доступ.
Ключі математично пов’язані, як описано в статті що таке публічний ключ: підписане приватним ключем перевіряється публічним, але з публічного ключа приватний не відтворити.
Як працює вхід за ключем
- Ваш комп’ютер підключається до сервера, і обидві сторони встановлюють шифрований канал. Сервер доводить свою справжність ключем хоста.
- Клієнт повідомляє, яким публічним ключем хоче скористатися.
- Сервер перевіряє, чи є цей ключ у файлі
~/.ssh/authorized_keysкористувача. - Якщо є, сервер просить клієнта підписати дані, унікальні для цієї сесії. Клієнт підписує їх приватним ключем.
- Сервер перевіряє підпис публічним ключем. Якщо він дійсний — ви увійшли.
Приватний ключ ніколи не залишає ваш комп’ютер, а підписані дані щоразу інші, тож перехоплювачу нічого повторити. Зламаний сервер віддасть лише публічні ключі, які зловмиснику марні.
Як створити SSH-ключ
Windows 10 і 11, macOS та Linux мають вбудований OpenSSH. Відкрийте термінал (у Windows — PowerShell) і виконайте:
ssh-keygen -t ed25519 -C "your-name@laptop"
-t ed25519обирає алгоритм Ed25519: короткий, швидкий і надійний.-t rsa -b 4096— лише для дуже старих систем.-Cдодає коментар, щоб потім упізнати ключ.- Погодьтеся з типовим розташуванням файлу й задайте passphrase. Вона шифрує приватний ключ на диску, тож викрадений ноутбук чи бекап не дасть доступу.
Щоб не вводити passphrase щоразу, додайте ключ в SSH-агент раз на сесію: ssh-add ~/.ssh/id_ed25519. macOS уміє зберігати його в Keychain, у Windows є служба «OpenSSH Authentication Agent».
Як додати публічний ключ на сервер
Найпростіше в macOS і Linux:
ssh-copy-id user@server.example.com
Команда один раз входить за паролем і дописує ваш публічний ключ у ~/.ssh/authorized_keys. У Windows або без ssh-copy-id зробіть те саме вручну: скопіюйте єдиний рядок із файлу .pub і вставте його новим рядком в authorized_keys на сервері. Перевірте: ssh user@server.example.com має питати passphrase ключа, а не пароль сервера.
Для GitHub, GitLab та подібних сервісів відкрийте Settings → SSH keys, вставте вміст файлу .pub і збережіть. Перевірка: ssh -T git@github.com або ssh -T git@gitlab.com.
Ключі хоста й попередження під час першого входу
Під час першого підключення SSH показує відбиток сервера й питає, чи довіряти йому. Відповідь зберігається в ~/.ssh/known_hosts. Якщо відбиток згодом зміниться, SSH відмовиться підключатися з гучним попередженням. Зазвичай це означає перевстановлений сервер, але може означати й перехоплення з’єднання. Звірте новий відбиток з адміністратором, перш ніж видаляти старий запис командою ssh-keygen -R hostname.
Як виправити «Permission denied (publickey)»
- Пропонується не той ключ.
ssh -v user@hostпокаже, які ключі пробуються. Вкажіть потрібний явно:ssh -i ~/.ssh/id_ed25519 user@host. - Завеликі права доступу. SSH ігнорує ключі, які можуть читати інші. На сервері
~/.sshмає бути700,authorized_keys—600; приватний ключ має читати лише власник. - Ключ вставлено з помилкою. Публічний ключ — це один суцільний рядок. Переноси, додані редактором чи месенджером, роблять його недійсним.
- Не той користувач. Ключ встановлено для конкретного акаунта:
ssh root@hostіssh deploy@hostперевіряють різні файли. - Агент не запущено. Якщо
ssh-add -lне може під’єднатися до агента, запустіть його або використовуйте-i.
Добрі практики
- Один ключ — один пристрій. Загубили ноутбук — видаліть лише його публічний ключ із серверів і акаунтів.
- Завжди ставте passphrase або зберігайте ключ на апаратному ключі безпеки (
ssh-keygen -t ed25519-sk). - Коли вхід за ключем працює, вимкніть вхід за паролем на своїх серверах (
PasswordAuthentication noуsshd_config). Це повністю зупиняє підбір паролів. - Ніколи не вставляйте приватний ключ у чат, задачу чи репозиторій. Якщо так сталося — створіть нову пару й приберіть старий публічний ключ звідусіль.
- Час від часу переглядайте
authorized_keysі видаляйте ключі, яких не впізнаєте.
Часті запитання
Чи безпечніші SSH-ключі за паролі?
Так. Ключ надто довгий, щоб його підібрати, сервер ніколи не отримує ваш секрет, а фішинговий сайт не може його перехопити. З passphrase ключ захищений і в разі крадіжки файлу.
Чи можна один ключ використовувати на кількох комп’ютерах?
Скопіювати можна, але краще створити окремий ключ на кожному комп’ютері — тоді втрата одного пристрою не змусить замінювати доступ усюди.
Що робити, якщо загубив приватний ключ?
Відновити його неможливо. Увійдіть іншим способом, наприклад через вебконсоль хмарного провайдера, додайте новий публічний ключ і видаліть старий.
SSH і SFTP — це одне й те саме?
SFTP — протокол передавання файлів, що працює всередині SSH-з’єднання, тому ті самі ключі підходять для обох.
Коротко: створіть пару командою ssh-keygen -t ed25519, захистіть приватний ключ passphrase і копіюйте на сервери та Git-сервіси лише файл .pub. Сервер щоразу перевіряє свіжий підпис, тож ваш секрет ніколи не передається мережею.