Подключение к Git-серверу по SSH: полное руководство
SSH позволяет безопасно подключаться к Git-серверам без ввода пароля при каждой операции. Это может быть GitHub, GitLab, Bitbucket или собственный сервер компании. Статья покажет как настроить SSH подключение для разных сервисов, использовать несколько ключей и решать типичные проблемы.
Как работает SSH подключение к Git #
SSH использует асимметричное шифрование с парой ключей: приватный ключ хранится на вашем компьютере, публичный — добавляется на сервер.
Процесс аутентификации:
- Вы отправляете запрос на сервер (push или clone)
- Сервер присылает «вызов» — случайные данные
- Вы подписываете их своим приватным ключом
- Сервер проверяет подпись с помощью вашего публичного ключа
- Если совпадает — доступ разрешён, пароль не нужен
Это безопаснее и удобнее HTTPS с паролем: приватный ключ никогда не покидает ваш компьютер.
SSH для разных Git-сервисов #
GitHub:
# Создать ключ
ssh-keygen -t ed25519 -C "[email protected]"
# Скопировать публичный ключ
cat ~/.ssh/id_ed25519.pub
# Добавить в GitHub: Settings → SSH and GPG keys → New SSH key
# Клонировать по SSH
git clone [email protected]:username/repo.git
GitLab:
# Ключ создаётся так же
ssh-keygen -t ed25519 -C "[email protected]"
# Добавить в GitLab: Settings → SSH Keys
# Клонировать по SSH
git clone [email protected]:username/repo.git
Bitbucket:
# Ключ создаётся аналогично
# Добавить в: Personal settings → SSH keys
git clone [email protected]:username/repo.git
Собственный Git-сервер:
# Добавить публичный ключ на сервер
cat ~/.ssh/id_ed25519.pub | ssh [email protected] "cat >> ~/.ssh/authorized_keys"
git clone ssh://[email protected]/path/to/repo.git
Проверка SSH подключения #
После настройки обязательно проверьте подключение:
# Проверка GitHub
ssh -T [email protected]
# Hi username! You've successfully authenticated, but GitHub does not provide shell access.
# Проверка GitLab
ssh -T [email protected]
# Welcome to GitLab, @username!
# Проверка собственного сервера
ssh -T [email protected]
Если получаете Permission denied (publickey) — ключ не добавлен на сервер или используется неправильный ключ.
Несколько SSH ключей для разных сервисов #
Если у вас несколько аккаунтов (например, личный GitHub и рабочий GitLab), нужно настроить файл ~/.ssh/config:
# Создать конфигурационный файл
nano ~/.ssh/config
# Личный GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_github_personal
# Рабочий GitLab
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_gitlab_work
# Рабочий собственный сервер
Host company-git
HostName git.company.com
User git
IdentityFile ~/.ssh/id_company
Port 2222
Теперь SSH автоматически выбирает нужный ключ:
git clone [email protected]:personal/repo.git # использует id_github_personal
git clone [email protected]:work/project.git # использует id_gitlab_work
git clone git@company-git:internal/code.git # использует id_company
Для двух аккаунтов на одном сервере (например, два GitHub аккаунта):
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_personal
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_work
Используете разные алиасы:
git clone git@github-personal:personal-user/repo.git
git clone git@github-work:work-org/repo.git
Изменение URL существующего репозитория на SSH #
Если репозиторий уже клонирован через HTTPS:
# Посмотреть текущий URL
git remote -v
# origin https://github.com/username/repository.git (fetch)
# origin https://github.com/username/repository.git (push)
# Изменить URL на SSH
git remote set-url origin [email protected]:username/repository.git
# Проверить результат
git remote -v
# origin [email protected]:username/repository.git (fetch)
# origin [email protected]:username/repository.git (push)
SSH-агент и пароли на ключи #
Если SSH ключ защищён паролем (passphrase), его запрашивают при каждом подключении. SSH-агент запомнит пароль на время сеанса:
# Linux/macOS
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# Введите пароль один раз — агент запомнит
# Windows (Git Bash)
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_ed25519
# Проверить загруженные ключи
ssh-add -l
На macOS можно добавить ключ в Keychain для автоматической загрузки:
# macOS — добавить в Keychain
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Права доступа на SSH ключи #
SSH требователен к правам доступа. Если права неправильные, SSH отказывает в работе:
# Приватный ключ — только для владельца
chmod 600 ~/.ssh/id_ed25519
# Публичный ключ — можно читать всем
chmod 644 ~/.ssh/id_ed25519.pub
# Папка .ssh
chmod 700 ~/.ssh
Отладка SSH подключения #
Если что-то не работает:
# Стандартная проверка
ssh -T [email protected]
# Подробный вывод для отладки
ssh -v [email protected]
# Очень подробный вывод
ssh -vvv [email protected]
Подробный вывод покажет: какой ключ пробуется, какие методы аутентификации используются, где происходит ошибка.
Подключение через нестандартный порт #
Некоторые корпоративные серверы используют нестандартный порт:
# В ~/.ssh/config
Host git.company.com
HostName git.company.com
User git
Port 2222
IdentityFile ~/.ssh/id_company
# Или указать порт прямо в URL
git clone ssh://[email protected]:2222/repo.git
Полный сценарий настройки подключения к GitHub #
# 1. Проверить существующие ключи
ls -la ~/.ssh
# 2. Создать новый ключ
ssh-keygen -t ed25519 -C "[email protected]"
# Enter file: нажать Enter (использовать ~/ssh/id_ed25519)
# Passphrase: введите или оставьте пустой
# 3. Скопировать публичный ключ
cat ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAA... [email protected]
# 4. Добавить в GitHub
# Settings → SSH and GPG keys → New SSH key → вставить публичный ключ
# 5. Проверить подключение
ssh -T [email protected]
# Hi username! You've successfully authenticated
# 6. Клонировать репозиторий по SSH
git clone [email protected]:username/my-project.git
# 7. Работать как обычно
cd my-project
git add .
git commit -m "First commit"
git push
Часто задаваемые вопросы #
SSH работает, но пишет “Permission denied (publickey)” — проверьте: публичный ключ добавлен на сервер, права на приватный ключ chmod 600, SSH-агент запущен и ключ загружен (ssh-add -l).
Как использовать SSH через корпоративный прокси? Настройте ProxyCommand в ~/.ssh/config: ProxyCommand nc -x proxy.company.com:1080 %h %p.
Почему при первом подключении появляется вопрос о fingerprint? SSH проверяет, что вы подключаетесь к правильному серверу (не к Man-in-the-Middle). Сравните fingerprint с официальным — для GitHub он опубликован в документации.
Могу ли я использовать один ключ для нескольких сервисов? Да, один публичный ключ можно добавить на GitHub и GitLab одновременно. Это удобно, но если ключ скомпрометирован — нужно менять везде.
Что если я забыл passphrase ключа? Восстановить его невозможно. Создайте новый ключ, добавьте его на все сервисы, удалите старый.
Заключение #
SSH подключение к Git-серверам надёжно и удобно. После первоначальной настройки вы больше не вводите пароль при каждом git push или git pull. Правильная конфигурация нескольких ключей позволяет работать с личными и рабочими проектами без путаницы.
Для более подробной инструкции по настройке SSH именно для GitHub читайте руководство по настройке SSH для GitHub. Если вам нужно сравнение HTTPS и SSH протоколов — смотрите отдельную статью об этом.