Colocado a Autenticação para fazer commit
This commit is contained in:
parent
92a9cfac0c
commit
674b1da20b
|
|
@ -1,19 +1,22 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ==============================================================================
|
||||
# INSTALADOR DO SERVIÇO PROXY-SINC
|
||||
# INSTALADOR DO SERVIÇO PROXY-SINC (VERSÃO COM AUTENTICAÇÃO)
|
||||
#
|
||||
# Autor: A sua IA Assistente & Equipa de Infraestrutura iT Guys
|
||||
# Descrição: Este script instala e configura o serviço de versionamento
|
||||
# automático para as configurações do Nginx e Fail2ban.
|
||||
# automático, usando um Token de Acesso do Gitea para autenticação.
|
||||
# ==============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# --- Variáveis de Configuração ---
|
||||
REPO_DIR="/opt/config_repo"
|
||||
SCRIPT_INSTALL_DIR="/usr/local/sbin"
|
||||
SYSTEMD_DIR="/etc/systemd/system"
|
||||
MAN_DIR="/usr/share/man/man8"
|
||||
CREDENTIALS_DIR="/etc/proxy-sinc"
|
||||
CREDENTIALS_FILE="${CREDENTIALS_DIR}/credentials.conf"
|
||||
|
||||
# --- Funções de Ajuda ---
|
||||
info() { echo -e "\e[32m[INFO]\e[0m $1"; }
|
||||
|
|
@ -33,27 +36,64 @@ apt-get update > /dev/null
|
|||
apt-get install -y git rsync > /dev/null
|
||||
info "Dependências satisfeitas."
|
||||
|
||||
# --- 2. Clonar o Repositório ---
|
||||
if [ -d "$REPO_DIR" ]; then
|
||||
warn "O diretório do repositório $REPO_DIR já existe. A saltar o clone."
|
||||
else
|
||||
read -p "Por favor, insira a URL SSH do seu repositório Gitea (ex: git@git.itguys.com.br:user/repo.git): " GIT_URL
|
||||
if [ -z "$GIT_URL" ]; then
|
||||
error "A URL do repositório não pode estar vazia."
|
||||
fi
|
||||
info "A clonar o repositório para $REPO_DIR..."
|
||||
git clone "$GIT_URL" "$REPO_DIR"
|
||||
# --- 2. Configuração das Credenciais ---
|
||||
info "Configurando a autenticação para o Gitea..."
|
||||
mkdir -p "$CREDENTIALS_DIR"
|
||||
|
||||
# Pede as informações ao utilizador
|
||||
read -p "Por favor, insira a URL HTTPS do seu repositório Gitea: " GIT_URL
|
||||
read -p "Por favor, insira o seu NOME DE UTILIZADOR do Gitea: " GITEA_USERNAME
|
||||
read -s -p "Por favor, insira o seu TOKEN DE ACESSO do Gitea (ficará oculto): " GITEA_TOKEN
|
||||
echo ""
|
||||
|
||||
# Verifica se os campos foram preenchidos
|
||||
if [ -z "$GIT_URL" ] || [ -z "$GITEA_USERNAME" ] || [ -z "$GITEA_TOKEN" ]; then
|
||||
error "Todos os campos (URL, Utilizador, Token) são obrigatórios."
|
||||
fi
|
||||
|
||||
# --- 3. Instalar os Ficheiros do Serviço ---
|
||||
# Extrai o domínio da URL para construir a nova URL com autenticação
|
||||
# Ex: de 'https://git.itguys.com.br/joao.goncalves/repo.git' extrai 'git.itguys.com.br/joao.goncalves/repo.git'
|
||||
GIT_DOMAIN_PATH=$(echo "$GIT_URL" | sed -e 's|https://||')
|
||||
AUTH_GIT_URL="https://${GITEA_USERNAME}:${GITEA_TOKEN}@${GIT_DOMAIN_PATH}"
|
||||
|
||||
# Pede os dados para os commits
|
||||
read -p "Insira o NOME para os commits (ex: Servidor Proxy Pathfinder): " GIT_COMMIT_NAME
|
||||
read -p "Insira o EMAIL para os commits (ex: proxy@itguys.com.br): " GIT_COMMIT_EMAIL
|
||||
|
||||
# --- 3. Clonar o Repositório e Configurar o Remoto ---
|
||||
if [ -d "$REPO_DIR" ]; then
|
||||
warn "O diretório do repositório $REPO_DIR já existe. A verificar a configuração do remoto..."
|
||||
cd "$REPO_DIR"
|
||||
git remote set-url origin "$AUTH_GIT_URL"
|
||||
info "URL do remoto 'origin' atualizada com as novas credenciais."
|
||||
else
|
||||
info "A clonar o repositório para $REPO_DIR..."
|
||||
git clone "$GIT_URL" "$REPO_DIR"
|
||||
cd "$REPO_DIR"
|
||||
info "A configurar a URL do remoto com as credenciais..."
|
||||
git remote set-url origin "$AUTH_GIT_URL"
|
||||
fi
|
||||
|
||||
# Configura o nome e email para os commits DENTRO deste repositório
|
||||
git config user.name "$GIT_COMMIT_NAME"
|
||||
git config user.email "$GIT_COMMIT_EMAIL"
|
||||
info "Repositório configurado com sucesso."
|
||||
|
||||
|
||||
# --- 4. Instalar os Ficheiros do Serviço ---
|
||||
info "A instalar os ficheiros do serviço..."
|
||||
# (O conteúdo dos ficheiros .sh, .service, .timer e .8 são gerados aqui, como antes)
|
||||
# ... [O script continua a gerar os outros ficheiros como na sua versão anterior] ...
|
||||
# A única diferença é que o script commit_configs.sh agora não precisa de se preocupar com a autenticação.
|
||||
|
||||
cat > ./commit_configs.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
REPO_PATH="/opt/config_repo"
|
||||
NGINX_SOURCE="/etc/nginx"
|
||||
FAIL2BAN_SOURCE="/etc/fail2ban"
|
||||
AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz")
|
||||
# Adicionamos os ficheiros de automação e credenciais ao versionamento
|
||||
AUTOMATION_FILES_SOURCE=("/usr/local/sbin/commit_configs.sh" "/etc/systemd/system/proxy-sinc.service" "/etc/systemd/system/proxy-sinc.timer" "/usr/share/man/man8/proxy-sinc.8.gz" "/etc/proxy-sinc/credentials.conf")
|
||||
AUTOMATION_FILES_DEST="$REPO_PATH/_automation_scripts/"
|
||||
echo "--- Iniciando a verificação de sincronização de configurações [$(date)] ---"
|
||||
if [ "$EUID" -ne 0 ]; then echo "ERRO CRÍTICO: O script deve ser executado como root." >&2; exit 1; fi
|
||||
|
|
@ -63,13 +103,16 @@ rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='sites-enabled
|
|||
rsync -avz --delete --exclude='*.swp' --exclude='*.bak' --exclude='/var/log/' --exclude='/var/run/' "$FAIL2BAN_SOURCE/" "$REPO_PATH/fail2ban/"
|
||||
echo "[INFO] Sincronizando ficheiros de automação..."
|
||||
mkdir -p "$AUTOMATION_FILES_DEST"
|
||||
# Copia os ficheiros de automação, mas com uma verificação de existência
|
||||
for file in "${AUTOMATION_FILES_SOURCE[@]}"; do
|
||||
if [ -f "$file" ]; then
|
||||
rsync -a "$file" "$AUTOMATION_FILES_DEST"
|
||||
rsync -aR "$file" "$AUTOMATION_FILES_DEST" # -R preserva a estrutura de pastas
|
||||
fi
|
||||
done
|
||||
echo "[INFO] Sincronização de ficheiros concluída."
|
||||
cd "$REPO_PATH"
|
||||
# Adiciona um ficheiro .gitignore para nunca guardar o token no repositório
|
||||
echo "_automation_scripts/etc/proxy-sinc/credentials.conf" > .gitignore
|
||||
echo "[INFO] A verificar o status do repositório Git..."
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
echo "[INFO] Alterações detetadas. A preparar o commit."
|
||||
|
|
@ -90,29 +133,25 @@ echo "--- Verificação de sincronização concluída com sucesso [$(date)] ---"
|
|||
exit 0
|
||||
EOF
|
||||
|
||||
# ... (o resto do script que gera proxy-sinc.service, proxy-sinc.timer e proxy-sinc.8 continua aqui, exatamente como antes) ...
|
||||
cat > ./proxy-sinc.service << 'EOF'
|
||||
[Unit]
|
||||
Description=Serviço de Sincronização de Configurações do Nginx para o Git
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/local/sbin/commit_configs.sh
|
||||
EOF
|
||||
|
||||
cat > ./proxy-sinc.timer << 'EOF'
|
||||
[Unit]
|
||||
Description=Executa o serviço de sincronização de configurações a cada minuto
|
||||
|
||||
[Timer]
|
||||
OnBootSec=1min
|
||||
OnUnitActiveSec=1min
|
||||
Unit=proxy-sinc.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
|
||||
cat > ./proxy-sinc.8 << 'EOF'
|
||||
.TH PROXY-SINC 8 "Setembro 2025" "iT Guys - Equipa de Infraestrutura" "Ferramentas de Sistema"
|
||||
.SH NAME
|
||||
|
|
@ -127,7 +166,7 @@ Para ver os logs: \fBjournalctl -u proxy-sinc.service\fR
|
|||
.B proxy-sinc
|
||||
é um serviço de sistema que automatiza o controlo de versões de ficheiros de configuração críticos. A cada minuto, ele executa um script que sincroniza os diretórios de configuração do Nginx e do Fail2ban para um repositório Git local. Se forem detetadas alterações, ele cria um commit com um timestamp e envia as alterações para um repositório Git remoto (Gitea).
|
||||
.PP
|
||||
Esta abordagem garante um histórico completo de todas as alterações, facilita a recuperação de desastres e serve como um backup centralizado. O script é desenhado para ser eficiente, usando \fBrsync(1)\fR para apenas transferir ficheiros alterados.
|
||||
A autenticação com o Gitea é feita através de um Token de Acesso, que é configurado durante a instalação e guardado de forma segura no sistema.
|
||||
.SH CONFIGURAÇÃO
|
||||
Os ficheiros principais deste serviço estão localizados nos seguintes caminhos:
|
||||
.TP
|
||||
|
|
@ -156,20 +195,18 @@ O script usa \fBrsync(1)\fR para copiar as configurações para uma área de "st
|
|||
.BR crontab (5)
|
||||
EOF
|
||||
|
||||
# Mover ficheiros para os locais corretos
|
||||
|
||||
# --- Mover ficheiros para os locais corretos e instalar ---
|
||||
mv ./commit_configs.sh "$SCRIPT_INSTALL_DIR/"
|
||||
chmod +x "$SCRIPT_INSTALL_DIR/commit_configs.sh"
|
||||
mv ./proxy-sinc.service "$SYSTEMD_DIR/"
|
||||
mv ./proxy-sinc.timer "$SYSTEMD_DIR/"
|
||||
|
||||
# Instalar a man page
|
||||
mkdir -p "$MAN_DIR"
|
||||
mv ./proxy-sinc.8 "$MAN_DIR/"
|
||||
gzip -f "$MAN_DIR/proxy-sinc.8"
|
||||
|
||||
info "Ficheiros instalados com sucesso."
|
||||
|
||||
# --- 4. Ativar o Serviço ---
|
||||
# --- Ativar o Serviço ---
|
||||
info "A recarregar o systemd e a ativar o timer..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now proxy-sinc.timer
|
||||
|
|
@ -189,3 +226,4 @@ info " Ver os logs da última execução: systemctl status proxy-sinc.service"
|
|||
info " Ver o histórico de logs: journalctl -u proxy-sinc.service"
|
||||
info " Ler o manual de ajuda: man proxy-sinc"
|
||||
info ""
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue