SSH onboarding через Vault CA
| README.md | ||
| setup.sh | ||
| vault-ssh-renew.sh | ||
git-ssh-setup
Автоматическая настройка SSH-доступа к git.lokeo.ru через Vault SSH Certificate Authority.
Как это работает
Сотрудник Vault Authentik Forgejo
│ │ │ │
├─ vault login (OIDC) ────►├──── redirect ────────►│ │
│◄─── vault token ────────┤◄─── auth ok ──────────┤ │
│ │ │ │
├─ vault write (sign) ────►│ │ │
│◄─── SSH certificate ────┤ │ │
│ │ │ │
├─ git push ──────────────────────────────────────────────────────────►│
│ (cert auto-verified) │ │ │
- Vault подписывает SSH-ключ сотрудника, выдавая сертификат (TTL 1 час)
- Forgejo доверяет CA Vault — проверяет сертификат при SSH-подключении
- Authentik — OIDC-провайдер для авторизации в Vault
- Скрипт автоматически обновляет сертификат при каждом
git push/pull
Быстрый старт
Требования
- Vault CLI
jq(sudo apt install jq/brew install jq)- SSH-ключ ed25519 (скрипт сгенерирует, если нет)
Установка
curl -sL https://git.lokeo.ru/infra/git-ssh-setup/raw/branch/main/setup.sh | bash
Или вручную:
git clone https://git.lokeo.ru/infra/git-ssh-setup.git
cd git-ssh-setup
bash setup.sh
Что делает setup.sh
- Проверяет зависимости (vault, jq, ssh-keygen)
- Генерирует SSH-ключ, если отсутствует
- Устанавливает
vault-ssh-renew.shв~/.local/bin/ - Настраивает
~/.ssh/configс автообновлением сертификата - Добавляет
VAULT_ADDRв shell rc - Выполняет первый OIDC-логин и получает сертификат
После установки
# Клонировать репозиторий
git clone ssh://git@git.lokeo.ru:222/org/repo.git
# Пушить
git push origin main
# Сертификат обновляется автоматически
Ручное использование
export VAULT_ADDR=https://vault.lokeo.ru
# Логин через Authentik (откроется браузер)
vault login -method=oidc role=reader
# Подписать ключ
vault write -field=signed_key \
ssh-client-signer/sign/git-user \
public_key=@~/.ssh/id_ed25519.pub \
valid_principals="$(vault token lookup -format=json | jq -r '.data.display_name')" \
> ~/.ssh/id_ed25519-cert.pub
# Проверить сертификат
ssh-keygen -Lf ~/.ssh/id_ed25519-cert.pub
Сроки действия
| Что | TTL |
|---|---|
| SSH-сертификат | 1 час |
| Vault token | 8 часов |
| Обновление | автоматически при git-операции |
Troubleshooting
«vault: command not found» — установи Vault CLI
«OIDC-логин не удался» — проверь доступность https://vault.lokeo.ru и https://auth.lokeo.ru
«Не удалось подписать ключ» — vault token истёк, выполни vault login -method=oidc role=reader
«Permission denied (publickey)» — сертификат не совпадает с username в Forgejo. Проверь valid_principals в сертификате: ssh-keygen -Lf ~/.ssh/id_ed25519-cert.pub