SSH ключи для Git
Настройка SSH-аутентификации для безопасного подключения к GitHub/GitLab без ввода пароля
Зачем нужно
- Не вводить логин/пароль при каждом push/pull
- Безопаснее HTTPS с паролем
- Обязательно для многих рабочих процессов
- Позволяет работать с несколькими аккаунтами
Где используется
- Подключение к GitHub, GitLab, Bitbucket
- Работа с приватными репозиториями
- CI/CD системы для доступа к коду
- Доступ к серверам через SSH
Предпосылки
- Установка и настройка
- Аккаунт на GitHub
Как работает SSH
[Ваш компьютер] [GitHub]
Приватный ключ ←── пара ──→ Публичный ключ
(~/.ssh/id_ed25519) (в настройках аккаунта)
↓
Подписывает запрос ──────────────→ Проверяет подпись
✓ Доступ разрешён
- Приватный ключ — хранится ТОЛЬКО на вашем компьютере, никому не передаётся
- Публичный ключ — загружается на GitHub, можно передавать свободно
Генерация SSH-ключа
Шаг 1: Проверить существующие ключи
ls -al ~/.ssh
# Если видите id_ed25519 и id_ed25519.pub — ключи уже есть
Шаг 2: Сгенерировать новый ключ
# Рекомендуемый алгоритм — Ed25519
ssh-keygen -t ed25519 -C "your_email@example.com"
# Если система не поддерживает Ed25519:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Диалог генерации:
Generating public/private ed25519 key pair.
Enter file in which to save the key (~/.ssh/id_ed25519): [Enter — по умолчанию]
Enter passphrase (empty for no passphrase): [Рекомендуется ввести пароль]
Enter same passphrase again: [Повторить пароль]
Шаг 3: Запустить ssh-agent
# macOS/Linux
eval "$(ssh-agent -s)"
# Agent pid 12345
# Windows (Git Bash)
eval "$(ssh-agent -s)"
Шаг 4: Добавить ключ в ssh-agent
# macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# Linux / Windows (Git Bash)
ssh-add ~/.ssh/id_ed25519
Добавление ключа на GitHub
Шаг 1: Скопировать публичный ключ
# macOS
pbcopy < ~/.ssh/id_ed25519.pub
# Linux
cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard
# Windows (Git Bash)
cat ~/.ssh/id_ed25519.pub | clip
# Или просто вывести и скопировать вручную
cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG... your_email@example.com
Шаг 2: Добавить на GitHub
- GitHub → Settings → SSH and GPG keys
- New SSH key
- Title: "Мой ноутбук" (любое описание)
- Key type: Authentication Key
- Вставить публичный ключ
- Add SSH key
Проверка подключения
ssh -T git@github.com
# Hi username! You've been successfully authenticated, but GitHub
# does not provide shell access.
Если видите "Hi username!" — всё работает.
Переключение с HTTPS на SSH
# Проверить текущий remote
git remote -v
# origin https://github.com/user/repo.git (fetch)
# Изменить на SSH
git remote set-url origin git@github.com:user/repo.git
# Проверить
git remote -v
# origin git@github.com:user/repo.git (fetch)
Работа с несколькими аккаунтами
Файл ~/.ssh/config
# ~/.ssh/config
# Личный аккаунт
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
# Рабочий аккаунт
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
Использование
# Личный репозиторий
git clone git@github.com:personal/repo.git
# Рабочий репозиторий
git clone git@github-work:company/repo.git
Автозапуск ssh-agent
Windows (Git Bash) — добавить в ~/.bashrc
# ~/.bashrc
env=~/.ssh/agent.env
agent_load_env { test -f "$env" && . "$env" >| /dev/null ; }
agent_start {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ;
}
agent_load_env
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add ~/.ssh/id_ed25519
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add ~/.ssh/id_ed25519
fi
unset env
macOS — добавить в ~/.ssh/config
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
Частые ошибки
- Делиться приватным ключом — передавать можно ТОЛЬКО
.pubфайл - Забыть добавить ключ в ssh-agent — получите "Permission denied (publickey)"
- Клонировать по HTTPS вместо SSH — тогда SSH-ключ не используется
- Не поставить passphrase — без пароля кто угодно с доступом к файлу получит ваш ключ
- Забыть перезапустить ssh-agent — после перезагрузки агент теряет ключи
Практика
- Проверьте есть ли у вас SSH-ключи (
ls ~/.ssh) - Сгенерируйте новый ключ Ed25519
- Добавьте публичный ключ на GitHub
- Проверьте подключение:
ssh -T git@github.com - Клонируйте репозиторий по SSH
- Сделайте push — убедитесь что пароль не запрашивается