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
|
||||
|
||||
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