docs: SSH onboarding through Vault CA
This commit is contained in:
parent
f3b726f21c
commit
ca9a7af7e4
1 changed files with 101 additions and 1 deletions
102
README.md
102
README.md
|
|
@ -1,3 +1,103 @@
|
||||||
# git-ssh-setup
|
# git-ssh-setup
|
||||||
|
|
||||||
SSH onboarding через Vault CA
|
Автоматическая настройка 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](https://developer.hashicorp.com/vault/install)
|
||||||
|
- `jq` (`sudo apt install jq` / `brew install jq`)
|
||||||
|
- SSH-ключ ed25519 (скрипт сгенерирует, если нет)
|
||||||
|
|
||||||
|
### Установка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -sL https://git.lokeo.ru/infra/git-ssh-setup/raw/branch/main/setup.sh | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Или вручную:
|
||||||
|
|
||||||
|
```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-логин и получает сертификат
|
||||||
|
|
||||||
|
### После установки
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Клонировать репозиторий
|
||||||
|
git clone ssh://git@git.lokeo.ru:222/org/repo.git
|
||||||
|
|
||||||
|
# Пушить
|
||||||
|
git push origin main
|
||||||
|
|
||||||
|
# Сертификат обновляется автоматически
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ручное использование
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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](https://developer.hashicorp.com/vault/install)
|
||||||
|
|
||||||
|
**«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`
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue