// DevOps
SSH vs HTTPS в Git: как перестать вводить пароли и не потерять ключи
Опубликовано 20.03.2026
Вы устали вводить пароли или токены при каждом git pull и git push?
Копируете SSH‑ключ на каждый сервер и боитесь, что его украдут или он «застрянет» в логах?
В этой статье разберём, когда выбирать SSH, когда HTTPS, как безопасно настроить доступ к GitHub / GitLab и как не превращать CI/CD в сборник токенов‑паролей.
Выбор между SSH и HTTPS — это не вопрос вкуса, а вопрос безопасности и удобства автоматизации. Разберёмся, как настроить доступ так, чтобы он не мешал работать.
1. SSH: Ключи и безопасность
SSH (Secure Shell) — стандарт для постоянной работы. Вместо паролей здесь используются пары ключей. Вы подтверждаете свою личность владением приватным ключом, который никогда не покидает ваш компьютер.
Как не разбрасываться ключами (SSH Agent)
Главная ошибка — копировать свой приватный ключ на каждый сервер, где нужно сделать git pull. Это дыра в безопасности. Вместо этого используйте Agent Forwarding.
Суть: Ваш локальный компьютер выступает в роли «хранителя» ключа. Когда удаленный сервер хочет постучаться в GitHub, он пробрасывает запрос к вашему локальному агенту.
1. Добавьте ключ в агент локально
ssh-add ~/.ssh/id_ed25519
2. Разрешите проброс в ~/.ssh/config
Вместо того чтобы каждый раз писать ssh -A, настройте автоматизацию для нужных хостов:
Host my-server
HostName 1.2.3.4
User admin
ForwardAgent yes
Теперь, зайдя на my-server, вы сможете клонировать там свои приватные репозитории, но самого ключа на сервере не будет.
2. Несколько аккаунтов на одном устройстве
Частая ситуация: рабочий GitLab и личный GitHub. Использовать один ключ для всего — плохая практика. Чтобы Git сам понимал, какой ключ подложить, используйте алиасы в ~/.ssh/config.
2.1. Алиасы в ~/.ssh/config
Пример конфигурации:
# Рабочий GitLab
Host gitlab.work
HostName gitlab.company.com
IdentityFile ~/.ssh/id_ed25519_work
# Личный GitHub
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_ed25519_personal
Как это использовать:
- При клонировании рабочего проекта используйте имя хоста из конфига:
git clone git@gitlab.work:department/project.git - При работе с личным GitHub в
git remote‑адресах останется стандартноеgit@github.com:user/repo.git.
3. Когда HTTPS объективно лучше
HTTPS не стоит списывать со счетов. С тех пор как GitHub перешёл на Personal Access Tokens (PAT), этот протокол стал незаменим в ряде случаев.
3.1. Строгие корпоративные сети
Если системные администраторы закрыли порт 22 (SSH), HTTPS на стандартном 443 порту — ваше спасение.
3.2. Docker и CI/CD
Внутри Docker‑контейнеров или временных пайплайнов проще прокинуть токен через переменную окружения, чем возиться с генерацией и регистрацией SSH‑ключей.
3.3. Разовые задачи
Если нужно быстро скачать код на чужой машине, проще сгенерировать временный токен в браузере, чем оставлять следы в виде ключей.
3.4. Опасности https://<TOKEN>@... и безопасные альтернативы
Использование токена прямо в URL:
git clone https://<TOKEN>@github.com/username/repo.git
— крайне небезопасная практика: токен может попасть в:
- историю shell (
~/.bash_history); - логи CI/CD;
- скриншоты и заметки.
Лучше так:
- используйте
git configсcredential.helper:git config credential.helper store # затем при первом запросе ввести логин/токен - либо передавайте токен через переменные окружения в CI/CD (GitHub Actions, GitLab CI и т.п.).
4. Сравнение SSH и HTTPS
| Критерий | SSH | HTTPS |
|---|---|---|
| Удобство настройки | Нужно сгенерировать ключ, настроить агент | Проще: логин/токен или credential.helper |
| Постоянная разработка | ✅ Идеален: один раз настроил, и забыл | ✅ Работает, но требует токен логина |
| Работа на серверах | ✅ Через SSH‑agent forwarding | ❌ Нет агента, нужен токен/пароль |
| Публичные репозитории | ✅ Без авторизации для чтения | ✅ Без авторизации для чтения |
| Закрыт порт 22 | ❌ Не работает | ✅ Работает через порт 443 |
| CI/CD и Docker‑сборки | ⚠️ Удобно, но требует ключи/SSH‑agent | ✅ Очень удобно: токен через переменные |
| Разовые задачи / чужие машины | ⚠️ Нужно оставить ключ | ✅ Лучше: временный токен без лишних ключей |
| Уровень безопасности (по ключам) | ✅ Ключи остаются у вас (SSH‑agent) | ✅ Безопасен, если токен не в URL |
Вывод таблицы:
- Для своей машины и серверов — SSH с агентом и
~/.ssh/config. - Для CI/CD, Docker‑сборок, ограниченных сетей и разовых задач — HTTPS с токенами, но без токенов в URL.
5. Как переключить протокол в существующем проекте
Если вы склонировали проект по HTTPS, а хотите перейти на SSH (или наоборот), не нужно удалять папку и качать заново. Просто смените URL удаленного репозитория.
Переключение на SSH
git remote set-url origin git@github.com:user/repo.git
Переключение на HTTPS
git remote set-url origin https://github.com/user/repo.git
После этого все последующие git pull / git push будут использовать новый протокол.
Заключение
Для своей машины и доверенных серверов выбирайте SSH с настроенным агентом и ~/.ssh/config — это безопасно, удобно и масштабируется.
HTTPS оставьте для:
- CI/CD пайплайнов;
- Docker‑сборок;
- ограниченных сетевых условий;
- одноразовых задач.
Грамотная комбинация этих подходов — это и есть зрелая DevOps‑практика.
Практический чек‑лист: как настроить
Сгенерировать SSH‑ключи:
ssh-keygen -t ed25519 -C "your_email@example.com"Добавить ключ в SSH‑агент:
ssh-add ~/.ssh/id_ed25519Настроить
~/.ssh/configдля нескольких аккаунтов:Host gitlab.work HostName gitlab.company.com IdentityFile ~/.ssh/id_ed25519_work Host github.com HostName github.com IdentityFile ~/.ssh/id_ed25519_personalПроверить доступ:
ssh -T git@gitlab.work ssh -T git@github.comВ CI/CD использовать HTTPS с токенами через переменные окружения, не вставляя их в URL.
// Reviews
Отзывы по теме
Было несколько проблем касаясь как технической части так и понимания в целом. Михаил быстро ответил на запрос, помог разобраться и решил проблеммы технические и помог разобраться в понимании, за что отдельное спасибо. Результатом доволен.
Было несколько проблем касаясь как технической части так и понимания в целом. Михаил быстро ответил на запрос, помог разобраться и решил проблеммы технические и помог разобраться в понимании, за что отдельное спасибо. …
Настройка vps, настройка сервера
18.02.2026 · ★ 5/5
Все было сделано быстро и четко. Рекомендую
Все было сделано быстро и четко. Рекомендую
Настройка vps, настройка сервера
17.01.2026 · ★ 5/5
Всё прошло хорошо, исполнитель быстро реагировал на вопросы и помог решить проблему. Спасибо!
Всё прошло хорошо, исполнитель быстро реагировал на вопросы и помог решить проблему. Спасибо!
Настройка vps, настройка сервера
16.12.2025 · ★ 5/5
Все сделали оперативно. Будем и дальше обращаться. Рекомендую!
Все сделали оперативно. Будем и дальше обращаться. Рекомендую!
Настройка vps, настройка сервера
10.12.2025 · ★ 5/5
Все сделали оперативно. Михаил всегда на связи. Будем и дальше обращаться
Все сделали оперативно. Михаил всегда на связи. Будем и дальше обращаться
Настройка vps, настройка сервера
10.12.2025 · ★ 5/5
Михаил, профессионал! Уже ни первый раз показал это на практике.
Михаил, профессионал! Уже ни первый раз показал это на практике.
// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
// Related