configura.sh (token Gitea, git, chiave SSH, nomi dei server), verifica.sh (verde/rosso per ogni accesso), progetti.sh (scarica i repository visibili), e un CLAUDE.md che guida la persona senza chiederle mai un segreto in chat. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
125 lines
5.0 KiB
Bash
Executable File
125 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# PREPARA IL PC: token Gitea, git, chiave SSH, nomi dei server.
|
|
#
|
|
# ./configura.sh
|
|
#
|
|
# Si lancia nel proprio terminale (chiede il token Gitea con l'input
|
|
# nascosto). Si puo' rilanciare: quello che e' gia' a posto non viene toccato.
|
|
# Non crea accessi: quelli li crea un amministratore, qui si usano.
|
|
|
|
set -u
|
|
cd "$(dirname "$0")" || exit 1
|
|
. ./comune.sh
|
|
|
|
# --------------------------------------------------------------------------
|
|
titolo "1. AWS"
|
|
# --------------------------------------------------------------------------
|
|
if ! c_e aws ; then
|
|
male "AWS CLI non installata: installala e rilancia questo script."
|
|
elif IDENTITA="$(aws sts get-caller-identity --query Arn --output text 2> /dev/null)" ; then
|
|
ok "accesso AWS: ${IDENTITA##*/}"
|
|
else
|
|
attento "AWS non ancora configurato. Nel terminale:"
|
|
echo " aws configure (regione: $AWS_REGIONE)"
|
|
echo " con la chiave che crei dalla console AWS (Security credentials)."
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
titolo "2. Gitea"
|
|
# --------------------------------------------------------------------------
|
|
UTENTE="$(utente_gitea)"
|
|
if [ -n "$UTENTE" ] ; then
|
|
ok "token Gitea gia' salvato (utente $UTENTE)"
|
|
else
|
|
echo " Incolla il token Gitea (Impostazioni → Applicazioni → Genera token)."
|
|
echo " Non si vede mentre lo incolli, ed e' normale."
|
|
read -r -s -p " Token: " TOKEN ; echo
|
|
TOKEN="$(printf '%s' "$TOKEN" | tr -d '[:space:]')"
|
|
mkdir -p "$(dirname "$TOKEN_GITEA_FILE")"
|
|
chmod 700 "$(dirname "$TOKEN_GITEA_FILE")"
|
|
( umask 077 ; printf '%s\n' "$TOKEN" > "$TOKEN_GITEA_FILE" )
|
|
UTENTE="$(utente_gitea)"
|
|
if [ -n "$UTENTE" ] ; then
|
|
ok "token valido, salvato in $TOKEN_GITEA_FILE (utente $UTENTE)"
|
|
else
|
|
rm -f "$TOKEN_GITEA_FILE"
|
|
male "Gitea non accetta questo token: controlla di averlo copiato intero, o generane un altro."
|
|
fi
|
|
fi
|
|
|
|
# git: chi sei, e come si ricorda le credenziali. Il token vale anche come
|
|
# password per git: lo si scrive una volta in ~/.git-credentials.
|
|
if [ -n "$UTENTE" ] ; then
|
|
[ -n "$(git config --global user.name)" ] || git config --global user.name "$UTENTE"
|
|
if [ -z "$(git config --global user.email)" ] ; then
|
|
read -r -p " La tua email di lavoro (per i commit): " EMAIL
|
|
[ -n "$EMAIL" ] && git config --global user.email "$EMAIL"
|
|
fi
|
|
[ -n "$(git config --global credential.helper)" ] || git config --global credential.helper store
|
|
CREDENZIALI="$HOME/.git-credentials"
|
|
if ! grep -q "@$GITEA_HOST" "$CREDENZIALI" 2> /dev/null ; then
|
|
( umask 077 ; printf 'https://%s:%s@%s\n' "$UTENTE" "$(token_gitea)" "$GITEA_HOST" >> "$CREDENZIALI" )
|
|
fi
|
|
ok "git configurato ($(git config --global user.name) <$(git config --global user.email)>)"
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
titolo "3. Chiave SSH"
|
|
# --------------------------------------------------------------------------
|
|
if [ -f "$CHIAVE_SSH" ] ; then
|
|
ok "chiave gia' presente: $CHIAVE_SSH"
|
|
else
|
|
mkdir -p "$HOME/.ssh" && chmod 700 "$HOME/.ssh"
|
|
COMMENTO="${UTENTE:-$(whoami)}@oto"
|
|
ssh-keygen -q -t ed25519 -f "$CHIAVE_SSH" -C "$COMMENTO" -N "" \
|
|
&& ok "chiave creata: $CHIAVE_SSH"
|
|
fi
|
|
if [ -f "$CHIAVE_SSH.pub" ] ; then
|
|
echo
|
|
echo " Manda all'amministratore QUESTA riga (e' la parte pubblica, si puo' mandare in chat):"
|
|
echo
|
|
echo " $(cat "$CHIAVE_SSH.pub")"
|
|
echo
|
|
echo " Il file $CHIAVE_SSH, senza .pub, non esce mai da questo PC."
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
titolo "4. Nomi dei server in ~/.ssh/config"
|
|
# --------------------------------------------------------------------------
|
|
# Un blocco fra due segni, riscritto intero a ogni giro: cosi' quando cambia
|
|
# un server basta rilanciare. Un nome gia' definito fuori dal blocco non si
|
|
# tocca (e' una configurazione tua).
|
|
CONFIG="$HOME/.ssh/config"
|
|
touch "$CONFIG" && chmod 600 "$CONFIG"
|
|
INIZIO="# >>> OTO (scritto da _OTO_IT_onboard/configura.sh) >>>"
|
|
FINE_BLOCCO="# <<< OTO <<<"
|
|
# Confronto esatto, non una regex: il segno contiene "/" e "(".
|
|
FUORI="$(awk -v i="$INIZIO" -v f="$FINE_BLOCCO" '$0 == i {dentro=1; next} $0 == f {dentro=0; next} !dentro' "$CONFIG")"
|
|
|
|
BLOCCO="$INIZIO"
|
|
for VOCE in "$STAGING_NOME $STAGING_HOST" "$PRODUZIONE_NOME $PRODUZIONE_HOST" ; do
|
|
set -- $VOCE
|
|
if printf '%s\n' "$FUORI" | grep -qE "^Host[[:space:]]+$1([[:space:]]|\$)" ; then
|
|
attento "$1 e' gia' definito in $CONFIG: lo lascio com'e'"
|
|
continue
|
|
fi
|
|
BLOCCO="$BLOCCO
|
|
Host $1
|
|
HostName $2
|
|
User $UTENTE_SERVER
|
|
IdentitiesOnly yes
|
|
IdentityFile $CHIAVE_SSH
|
|
"
|
|
done
|
|
BLOCCO="$BLOCCO$FINE_BLOCCO"
|
|
|
|
{ printf '%s\n' "$FUORI" | sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' ; echo ; printf '%s\n' "$BLOCCO" ; } > "$CONFIG.nuovo" \
|
|
&& mv "$CONFIG.nuovo" "$CONFIG" && chmod 600 "$CONFIG"
|
|
ok "ssh $STAGING_NOME e ssh $PRODUZIONE_NOME: configurati"
|
|
|
|
# --------------------------------------------------------------------------
|
|
titolo "Fatto"
|
|
# --------------------------------------------------------------------------
|
|
echo " Ora: importa il file della VPN, poi lancia ./verifica.sh"
|