- Ajout de la gestion install et déploiement Clé RSA

- ajout de nouveau alias git
This commit is contained in:
Frogg 2026-05-08 09:48:34 +02:00
parent e7340e65c0
commit 9d746b4443
8 changed files with 227 additions and 70 deletions

18
TODO.md
View File

@ -1,21 +1,5 @@
# SCRIPT INSTALL
- LOCALE
- HEURE
- faire la connexion git sans faire pass a chaque fois en script
- pour la conf du firewall recharger les ancien et proposer les nouveau et supprimer les anciens possible
+ des services
# SCRIPT
- AJOUTER PLUS D ALIAS
- AJOUTER PLUS DE CMD
- AJOUTER PLUS DE PATH
# INFOS
> /etc/hosts (changer le nom de la machine)
> /etc/hostname (changer le nom de la machine)
> /etc/msmtprc (conf des mails)
- faire le redirect port 80
# GITEA
- faire le redirect port 80

View File

@ -12,6 +12,20 @@ CONF_LIST_CONFIG_JSON=$(cat <<EOF
]
},
{
"section": "NETWORK",
"items": [
{"label": "Nom de la machine", "cmd": "/etc/hosts"},
{"label": "Nom de la machine", "cmd": "/etc/hostname"}
]
},
{
"section": "MAIL",
"items": [
{"label": "msmtp config", "cmd": "/etc/msmtprc", "bin": "msmtp"}
]
},
{
"section": "APACHE",
"items": [
{"label": "Websites folder", "cmd": "/var/www/", "bin": "apache2"},

View File

@ -12,12 +12,16 @@ CONFIG_DEB_INSTALL_JSON='[
{"id": "apparmor_pkg", "label": "Installer AppArmor (Paquets)", "type": "pkg", "params": "apparmor"},
{"id": "fail2ban_pkg", "label": "Installer Fail2Ban", "type": "pkg", "params": "fail2ban"},
{"id": "ufw_pkg", "label": "Installer Firewall (UFW)", "type": "pkg", "params": "ufw"},
{"id": "gen_ssh_key", "label": "Creer une clé RSA pour SSH", "type": "sys", "params": "gen_ssh_key"},
{"id": "ipv6", "label": "Désactiver IPv6", "type": "sys", "params": "ipv6"},
{"id": "mail", "label": "Configurer ADMIN_MAIL", "type": "sys", "params": "mail"},
{"id": "hostname", "label": "Changer le Hostname", "type": "sys", "params": "hostname"},
{"id": "static_ip", "label": "Configurer IP Statique (eth0)", "type": "sys", "params": "static_ip"},
{"id": "deploy_ssh_key", "label": "Autoriser la clé RSA sur un hôte distant", "type": "sys", "params": "deploy_ssh_key"},
{"id": "clone_ssh_key", "label": "Cloner la clé RSA sur un hôte distant", "type": "sys", "params": "clone_ssh_key"},
{"id": "msmtp", "label": "Configurer MSMTP (Relais Mail)", "type": "sys", "params": "msmtp"},
{"id": "apparmor", "label": "Configurer AppArmor (Kernel)", "type": "sys", "params": "apparmor"},
{"id": "fail2ban", "label": "Configurer Fail2Ban", "type": "sys", "params": "fail2ban"},
{"id": "ufw", "label": "Configurer Firewall (UFW)", "type": "sys", "params": "ufw"}
{"id": "ufw", "label": "Configurer Firewall (UFW)", "type": "sys", "params": "ufw"},
{"id": "ntp", "label": "Configurer Heure Française", "type": "sys", "params": "ntp"}
]'

View File

@ -55,6 +55,10 @@ check_deb_sys_msmtp(){
return 1
}
check_deb_sys_ntp_setup() {
return 1
}
check_deb_sys_mail(){
if grep -q "ADMIN_MAIL=" /etc/environment 2>/dev/null; then
return 0
@ -93,61 +97,210 @@ check_deb_sys_ufw() {
fi
}
check_deb_sys_gen_ssh_key(){
if [[ -f "$RSA_KEY_FILE" ]]; then
return 0
fi
return 1
}
check_deb_sys_deploy_ssh_key(){
if [[ -f "$RSA_KEY_FILE" ]]; then
return 1
fi
return 0
}
check_deb_sys_clone_ssh_key(){
if [[ -f "$RSA_KEY_FILE" ]]; then
return 1
fi
return 0
}
do_deb_sys_gen_ssh_key() {
if [[ -f "$RSA_KEY_FILE" ]]; then
msg_success "Une clé SSH existe déjà : $RSA_KEY_FILE"
# On affiche l'empreinte pour info
ssh-keygen -l -f "$RSA_KEY_FILE"
else
msg_info "Génération d'une nouvelle clé RSA (4096 bits)..."
mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh"
# -t rsa : type RSA
# -b 4096 : taille robuste
# -N "" : pas de mot de passe (passphrase vide pour l'auto)
# -f : chemin du fichier
ssh-keygen -t rsa -b 4096 -N "" -f "$RSA_KEY_FILE"
msg_success "Clé générée avec succès."
fi
}
do_deb_sys_deploy_ssh_key() {
local remote_user remote_host remote_port
msg_info "Déploiement de la clé sur un serveur distant"
# 1. Vérification locale
if [[ ! -f "$HOME/.ssh/id_rsa.pub" ]]; then
msg_error "Erreur : Aucune clé publique trouvée. Générez-en une d'abord."
return
fi
# 2. Saisie des infos distantes
read -rp "Utilisateur distant (ex: root) : " remote_user
read -rp "IP ou Hostname distant : " remote_host
read -rp "Port SSH (par défaut 22) : " remote_port
remote_port=${remote_port:-22}
msg_info "Tentative de déploiement sur ${remote_user}@${remote_host}..."
# 3. Déploiement intelligent
# ssh-copy-id vérifie tout seul si la clé existe déjà sur le serveur !
if ssh-copy-id -p "$remote_port" "${remote_user}@${remote_host}"; then
msg_success "La clé a été installée (ou était déjà présente)."
msg_info "Test de connexion : ssh -p $remote_port ${remote_user}@${remote_host}"
else
msg_error "Le déploiement a échoué. Vérifiez vos accès ou le mot de passe."
fi
}
do_deb_sys_clone_ssh_key() {
local remote_user remote_host remote_port
local ssh_dir="$HOME/.ssh"
local key_file="$ssh_dir/id_rsa"
msg_info "Clonage de l'identité SSH vers un hôte distant"
# 1. Vérification locale
if [[ ! -f "$key_file" ]]; then
msg_error "Erreur : Aucune clé locale ($key_file) à copier."
return
fi
# 2. Saisie des infos
read -p "Utilisateur distant : " remote_user
read -p "IP/Hostname distant : " remote_host
read -p "Port SSH (22) : " remote_port
remote_port=${remote_port:-22}
# 3. Confirmation (car c'est sensible)
msg_warning "Ceci va copier votre clé PRIVÉE sur $remote_host."
read -p "Êtes-vous sûr ? (o/N) : " confirm
[[ "$confirm" != "o" && "$confirm" != "O" ]] && return
# 4. Envoi et configuration des droits en une seule commande
# On utilise tar pour conserver les droits et créer le dossier si besoin
msg_info "Transfert en cours..."
tar -C "$ssh_dir" -cf - id_rsa id_rsa.pub | ssh -p "$remote_port" "${remote_user}@${remote_host}" "
mkdir -p ~/.ssh && \
tar -C ~/.ssh -xf - && \
chmod 700 ~/.ssh && \
chmod 600 ~/.ssh/id_rsa && \
chmod 644 ~/.ssh/id_rsa.pub && \
echo 'Clés copiées et permissions réglées.'
"
if [[ $? -eq 0 ]]; then
msg_success "Identité clonée avec succès sur ${remote_host}."
else
msg_error "Le transfert a échoué."
fi
}
do_deb_sys_ntp() {
msg_info "Configuration de l'heure (Paris) et du NTP..."
# 1. On règle sur Paris au lieu de UTC
$SUDO timedatectl set-timezone Europe/Paris
msg_info "Fuseau horaire réglé sur Europe/Paris."
# 2. Configuration NTP (On ajoute des serveurs français pour la précision)
$SUDO tee /etc/systemd/timesyncd.conf <<EOF >/dev/null
[Time]
NTP=0.fr.pool.ntp.org 1.fr.pool.ntp.org pool.ntp.org
FallbackNTP=8.8.8.8 1.1.1.1
EOF
$SUDO timedatectl set-ntp true
$SUDO systemctl restart systemd-timesyncd
msg_success "Heure locale réglée : $(date)"
}
do_deb_sys_ufw() {
local ports_to_allow=() input_port="" current_ssh_port
local ports_to_allow=() input_port="" current_ssh_port current_rules
msg_info "Configuration interactive du Firewall UFW"
# 1. On commence par les bases
$SUDO ufw default deny incoming
$SUDO ufw default allow outgoing
# 1. On montre l'existant SANS y toucher
current_rules=$($SUDO ufw status | grep -v "(v6)" | grep "ALLOW" | awk '{print $1}' | cut -d'/' -f1 | tr '\n' ' ')
if [[ -n "$current_rules" ]]; then
echo -e "${COLOR_YELLOW}Ports actuellement ouverts : ${COLOR_WHITE}${current_rules}${NONE}"
msg_warning "Toutes les autres règles existantes seront supprimées"
msg_warning "Veuillez saisir tous les ports à ouvrir"
msg_warning "Même si il étaient déjà ouvert avant.\n"
fi
# 2. Boucle de saisie des ports
# 2. Boucle de saisie (on remplit uniquement le tableau en mémoire)
while true; do
read -p "Entrez un port à ouvrir (ou 'f' pour terminer) : " input_port
[[ "$input_port" == "f" ]] && break
# Validation : est-ce un nombre ?
if [[ ! "$input_port" =~ ^[0-9]+$ ]]; then
msg_error "Veuillez entrer un numéro de port valide (chiffres uniquement)."
msg_error "Port invalide."
continue
fi
# Gestion des DOUBLONS
if [[ " ${ports_to_allow[@]} " =~ " ${input_port} " ]]; then
msg_warning "Le port $input_port est déjà dans votre liste de saisie."
msg_warning "Déjà dans la liste."
else
ports_to_allow+=("$input_port")
msg_success "Port $input_port ajouté à la file d'attente."
fi
done
# 3. Sécurité SSH (vérification si le port 22 ou le port courant est là)
# On récupère le port SSH actuel pour éviter de se lock
# 3. Vérification de sécurité SSH (Toujours en mémoire)
current_ssh_port=$(ss -tlnp | grep sshd | awk '{print $4}' | awk -F':' '{print $NF}' | head -n1)
current_ssh_port=${current_ssh_port:-22}
if [[ ! " ${ports_to_allow[@]} " =~ " ${current_ssh_port} " ]]; then
msg_warning "ATTENTION : Votre port SSH ($current_ssh_port) n'est pas dans la liste !"
read -p "Voulez-vous l'ajouter par sécurité ? (O/n) : " add_ssh
msg_warning "ATTENTION : Votre port SSH ($current_ssh_port) n'est pas inclus !"
read -p "L'ajouter ? (O/n) : " add_ssh
[[ "$add_ssh" != "n" ]] && ports_to_allow+=("$current_ssh_port")
fi
# 4. Application des règles sans doublons dans UFW
msg_info "Application des règles..."
# 4. LE MOMENT CRITIQUE : Confirmation avant application
echo -e "\n${COLOR_YELLOW}RÉCAPITULATIF :${NONE}"
echo -e "Les ports suivants vont être ouverts : ${COLOR_LIGHT_BLUE}${ports_to_allow[*]}${NONE}"
msg_error "Toutes les autres règles existantes seront supprimées."
read -p "Appliquer ces changements maintenant ? (o/N) : " confirm
if [[ "$confirm" != "o" && "$confirm" != "O" ]]; then
msg_info "Action annulée. Le firewall n'a pas été modifié."
return
fi
# 5. APPLICATION RÉELLE (Seulement si confirmé)
msg_info "Application des modifications..."
# On reset seulement maintenant
$SUDO ufw --force reset >/dev/null
$SUDO ufw default deny incoming
$SUDO ufw default allow outgoing
for port in "${ports_to_allow[@]}"; do
# On utilise /tcp par défaut pour être strict comme on l'a dit
$SUDO ufw allow "$port"/tcp >/dev/null
done
# 5. Désactiver l'IPv6 dans UFW
msg_info "Desactivation de l IP v6..."
$SUDO sed -i 's/IPV6=yes/IPV6=no/' /etc/default/ufw
# 6. Activation finale
if $SUDO ufw --force enable; then
msg_success "Firewall activé avec les ports : ${ports_to_allow[*]}"
msg_success "Firewall mis à jour et activé."
fi
}
@ -198,8 +351,20 @@ do_deb_sys_zabbix(){
}
do_deb_sys_ipv6(){
echo "net.ipv6.conf.all.disable_ipv6 = 1" | $SUDO tee -a /etc/sysctl.conf > /dev/null && $SUDO sysctl -p
msg_success "IP V6 désactivée"
# Application des paramètres sysctl
# On cible 'all', 'default' et 'lo' (loopback)
$SUDO sysctl -w net.ipv6.conf.all.disable_ipv6=1 >/dev/null
$SUDO sysctl -w net.ipv6.conf.default.disable_ipv6=1 >/dev/null
$SUDO sysctl -w net.ipv6.conf.lo.disable_ipv6=1 >/dev/null
# Rendre les changements persistants après redémarrage
$SUDO cat <<EOF > /etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
msg_success "IPv6 désactivé avec succès"
}
do_deb_sys_mail(){

View File

@ -11,4 +11,17 @@ function git-reset(){
git clean -fd
echo -e "${COLOR_GREEN}✅ Dépôt synchronisé et nettoyé.${NONE}"
}
function git-clone(){
[[ -z "$1" ]] && echo "Veuillez préciser l'adresse d'un dépôt Git" && return 1
git init
git remote add origin "$1"
git fetch
git reset --hard origin/main
git clean -fd
echo -e "${COLOR_GREEN}✅ Dépôt cloné.${NONE}"
}

View File

@ -57,5 +57,6 @@ fi
. "${WELCOME_SCRIPT_PATH}/func/git.sh"
alias gsync='git-reset'
alias gclone='git-clone'
#endregion

View File

@ -14,6 +14,9 @@ fi
SUDO=""
[[ "$EUID" -ne 0 ]] && command -v sudo >/dev/null 2>&1 && SUDO="sudo"
# shellcheck disable=SC2034
RSA_KEY_FILE="$HOME/.ssh/id_rsa"
# Vérification JQ (une seule fois)
if ! command -v jq >/dev/null 2>&1; then
echo -e "${COLOR_YELLOW}⚡ JQ manquant... installation...${NONE}"
@ -99,7 +102,7 @@ if [[ $nb_actions -eq 0 ]]; then
exit 0
fi
emsg_info "Lancement de $nb_actions tâche(s) sélectionnée(s)..."
msg_info "Lancement de $nb_actions tâche(s) sélectionnée(s)..."
for id in "${selected_ids[@]}"; do
[[ -z "$id" ]] && continue
# Trouver l'index original pour cet ID

View File

@ -1,27 +0,0 @@
disable_ipv6()
{
local status
# Vérification des droits root
if [ "$EUID" -ne 0 ]; then
status=$(status_text error "Droits root requis pour modifier sysctl")
format_line "IPv6" "$status"
return 1
fi
# Application des paramètres sysctl
# On cible 'all', 'default' et 'lo' (loopback)
sysctl -w net.ipv6.conf.all.disable_ipv6=1 >/dev/null
sysctl -w net.ipv6.conf.default.disable_ipv6=1 >/dev/null
sysctl -w net.ipv6.conf.lo.disable_ipv6=1 >/dev/null
# Rendre les changements persistants après redémarrage
cat <<EOF > /etc/sysctl.d/99-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
status=$(status_text success "IPv6 désactivé avec succès")
format_line "IPv6" "$status"
}