feat: add setup.sh onboarding script

This commit is contained in:
redjx 2026-02-25 16:22:48 +00:00
parent ca9a7af7e4
commit b8238facc3

128
setup.sh Normal file
View file

@ -0,0 +1,128 @@
#!/bin/bash
# setup.sh — онбординг: настройка SSH для работы с git.lokeo.ru через Vault
# Запуск: curl -sL https://git.lokeo.ru/infra/git-ssh-setup/raw/branch/main/setup.sh | bash
set -euo pipefail
echo "=== Настройка SSH для git.lokeo.ru ==="
echo ""
# --- 1. Проверка зависимостей ---
for cmd in vault jq ssh-keygen; do
if ! command -v "$cmd" &>/dev/null; then
echo "Не найден: $cmd"
case "$cmd" in
vault) echo " Установи: https://developer.hashicorp.com/vault/install" ;;
jq) echo " Установи: sudo apt install jq / brew install jq" ;;
esac
exit 1
fi
done
echo "✅ Зависимости: vault, jq, ssh-keygen"
# --- 2. SSH-ключ ---
KEY="$HOME/.ssh/id_ed25519"
if [[ ! -f "$KEY" ]]; then
echo "🔑 SSH-ключ не найден, генерирую..."
ssh-keygen -t ed25519 -f "$KEY" -N "" -C "$(whoami)@$(hostname)"
fi
echo "✅ SSH-ключ: $KEY"
# --- 3. Скрипт обновления сертификата ---
SCRIPT_DIR="$HOME/.local/bin"
SCRIPT="$SCRIPT_DIR/vault-ssh-renew.sh"
mkdir -p "$SCRIPT_DIR"
SCRIPT_URL="https://git.lokeo.ru/infra/git-ssh-setup/raw/branch/main/vault-ssh-renew.sh"
if curl -sfL "$SCRIPT_URL" -o "$SCRIPT" 2>/dev/null; then
chmod +x "$SCRIPT"
echo "✅ Скрипт: $SCRIPT (скачан с git.lokeo.ru)"
else
echo "⚠️ Не удалось скачать скрипт, копирую встроенную версию..."
# Fallback — скрипт уже должен быть рядом
if [[ -f "$(dirname "$0")/vault-ssh-renew.sh" ]]; then
cp "$(dirname "$0")/vault-ssh-renew.sh" "$SCRIPT"
chmod +x "$SCRIPT"
echo "✅ Скрипт: $SCRIPT (из локальной копии)"
else
echo "❌ vault-ssh-renew.sh не найден"
exit 1
fi
fi
# --- 4. SSH config ---
SSH_CONFIG="$HOME/.ssh/config"
MARKER="# --- git.lokeo.ru (auto-managed) ---"
if grep -qF "$MARKER" "$SSH_CONFIG" 2>/dev/null; then
echo "✅ SSH config: уже настроен"
else
mkdir -p "$HOME/.ssh"
cat >> "$SSH_CONFIG" <<EOF
$MARKER
Match host git.lokeo.ru exec "$SCRIPT"
User git
Port 222
IdentityFile ~/.ssh/id_ed25519
CertificateFile ~/.ssh/id_ed25519-cert.pub
# --- end git.lokeo.ru ---
EOF
chmod 600 "$SSH_CONFIG"
echo "✅ SSH config: добавлен блок для git.lokeo.ru"
fi
# --- 5. VAULT_ADDR ---
SHELL_RC="$HOME/.bashrc"
[[ -f "$HOME/.zshrc" ]] && SHELL_RC="$HOME/.zshrc"
if ! grep -qF "VAULT_ADDR" "$SHELL_RC" 2>/dev/null; then
echo '' >> "$SHELL_RC"
echo 'export VAULT_ADDR=https://vault.lokeo.ru' >> "$SHELL_RC"
echo "✅ VAULT_ADDR добавлен в $SHELL_RC"
else
echo "✅ VAULT_ADDR: уже настроен"
fi
export VAULT_ADDR=https://vault.lokeo.ru
# --- 6. Первый логин ---
echo ""
echo "=== Первый вход ==="
echo "Сейчас откроется браузер для авторизации через Authentik."
echo ""
read -p "Нажми Enter для продолжения..." _
vault login -method=oidc role=reader -no-print || {
echo "❌ Логин не удался"
exit 1
}
# --- 7. Первый сертификат ---
USERNAME=$(vault token lookup -format=json | jq -r '.data.display_name')
vault write -field=signed_key \
ssh-client-signer/sign/git-user \
public_key=@"$KEY.pub" \
valid_principals="$USERNAME" \
> "$KEY-cert.pub"
echo ""
echo "✅ SSH-сертификат получен для $USERNAME"
ssh-keygen -Lf "$KEY-cert.pub" 2>/dev/null | grep -E "Type|Valid|Principals"
echo ""
echo "=== Готово! ==="
echo ""
echo "Теперь можно работать с git:"
echo " git clone ssh://git@git.lokeo.ru:222/org/repo.git"
echo " git push origin main"
echo ""
echo "Сертификат обновляется автоматически при каждом подключении."
echo "Vault token живёт 8 часов — после истечения откроется браузер."