SSH-ключ для GitHub
Обновлено 31 июля 2026 г.
SSH-ключ - это пара файлов, которая заменяет пароль при обмене с GitHub: открытую половину отдаёшь серверу, закрытую держишь у себя и никому не показываешь.
Пароль от аккаунта для push не годится с августа 2021 года, GitHub перестал его принимать. Если push просит пароль и не пускает, дело не в опечатке. Рабочих путей осталось два. По HTTPS вместо пароля вставляют personal access token: он создаётся в настройках аккаунта, показывается один раз и однажды кончается по сроку. По SSH настраивают ключ: один раз, и дальше ни push, ни pull ничего не спрашивают.
Создать пару
$ ssh-keygen -t ed25519 -C "you@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub-t ed25519 задаёт тип ключа, -C дописывает в конец метку, по которой ты потом узнаешь ключ в списке. На все три вопроса можно нажать Enter: путь по умолчанию подходит, а пароль на ключ не обязателен.
Получилось два файла в каталоге ~/.ssh. id_ed25519 - закрытый ключ, он не пересылается ни в чат, ни в тикет, ни в репозиторий. id_ed25519.pub - открытый, его и раздают.
Отдать открытый ключ GitHub
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIR6FU/avIPTOFi3WmDc8cO9K0pHY/DActmHI+4BaY1H you@example.comСкопируй строку целиком, от ssh-ed25519 до почты. На GitHub открой Settings, дальше SSH and GPG keys, кнопка New SSH key. В поле Title напиши, что это за машина, чтобы через год отличить ноутбук от рабочего компьютера. Key type оставь Authentication Key, в поле Key вставь строку.
Проверка занимает одну команду:
$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not provide shell access.Это и есть успех. Фраза про shell access не ошибка: оболочку GitHub не выдаёт никому, ключ нужен только для git.
Переключить репозиторий с HTTPS на SSH
Ключ настроен, а проект склонирован по HTTPS - push всё равно будет требовать токен. Адрес меняется одной командой:
$ git remote -v
origin https://github.com/username/my-project.git (fetch)
origin https://github.com/username/my-project.git (push)
$ git remote set-url origin git@github.com:username/my-project.gitОбрати внимание на форму: у SSH-адреса после имени хоста стоит двоеточие, а не косая черта. Подробнее про связь с сервером - в статье git remote.
Частые ошибки
$ git push
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.Значит, сервер не принял ни один из предложенных ключей. Проверяй по порядку: выполни ssh -T git@github.com и посмотри, что скажет он; убедись, что на GitHub вставлен .pub, а не закрытый ключ, и вставлен целиком, без переносов строк; проверь, что файл лежит именно в ~/.ssh и называется так, как ждёт ssh.
Если при создании ты задал пароль на ключ, его будут спрашивать при каждой операции. Расшифрованный ключ держит в памяти агент:
$ eval "$(ssh-agent -s)"
Agent pid 34792
$ ssh-add ~/.ssh/id_ed25519
Identity added: /home/user/.ssh/id_ed25519 (you@example.com)Ещё одна ловушка - права на файлы. SSH отказывается брать закрытый ключ, который доступен на чтение кому попало: chmod 700 ~/.ssh и chmod 600 ~/.ssh/id_ed25519 возвращают всё на место.