SSH onboarding через Vault CA
Find a file
2026-02-25 16:22:59 +00:00
README.md docs: SSH onboarding through Vault CA 2026-02-25 16:22:32 +00:00
setup.sh feat: add setup.sh onboarding script 2026-02-25 16:22:48 +00:00
vault-ssh-renew.sh feat: add vault-ssh-renew.sh auto-renewal script 2026-02-25 16:22:59 +00:00

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

  1. Проверяет зависимости (vault, jq, ssh-keygen)
  2. Генерирует SSH-ключ, если отсутствует
  3. Устанавливает vault-ssh-renew.sh в ~/.local/bin/
  4. Настраивает ~/.ssh/config с автообновлением сертификата
  5. Добавляет VAULT_ADDR в shell rc
  6. Выполняет первый 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