vault backup: 2026-02-19 11:58:57

This commit is contained in:
2026-02-19 11:58:57 +01:00
parent 3f7727ec57
commit 3c2716b50a
11 changed files with 1486 additions and 0 deletions

50
local/bin/sshconnect Executable file
View File

@@ -0,0 +1,50 @@
#!/bin/bash
# 1. Liste des hosts
mapfile -t ALL_HOSTS < <(grep -riI "^Host " ~/.ssh/config ~/.ssh/config.d/ 2>/dev/null | awk '{print $2}' | grep -v '*' | sort -u)
check_host() {
local host=$1
local info=$(ssh -G "$host")
local addr=$(echo "$info" | awk '/^hostname / {print $2}')
local port=$(echo "$info" | awk '/^port / {print $2}')
# Test de port TCP
if (timeout 0.7s bash -c "cat < /dev/null > /dev/tcp/$addr/$port") 2>/dev/null; then
# On utilise "|" comme délimiteur interne
printf "[ ON ]|%s\n" "$host"
else
printf "[ OFF ]|%s\n" "$host"
fi
}
export -f check_host
echo "Vérification des serveurs..."
# 2. Scan parallèle
STATE_LIST=$(printf "%s\n" "${ALL_HOSTS[@]}" | xargs -I {} -P 10 bash -c 'check_host "{}"')
# 3. Interface FZF
# On demande à fzf d'afficher les colonnes proprement
choice=$(echo "$STATE_LIST" | fzf --height 40% --reverse \
--delimiter="\|" \
--with-nth=1,2 \
--header "Tapez 'OFF' pour les serveurs HS | 'ON' pour les actifs")
# 4. Connexion propre
if [ -n "$choice" ]; then
# On extrait le nom de l'hôte en utilisant le délimiteur "|"
host_to_connect=$(echo "$choice" | cut -d'|' -f2)
# Nettoyage radical des caractères invisibles ou espaces restants
host_to_connect=$(echo "$host_to_connect" | tr -d '[:space:]')
if [[ "$choice" == *"[ ON ]"* ]]; then
clear
ssh "$host_to_connect"
else
echo -e "\033[0;31m⚠ Le serveur $host_to_connect semble OFFLINE.\033[0m"
read -p "Tenter quand même la connexion ? (y/n) " confirm
[[ $confirm == [yY] ]] && ssh "$host_to_connect"
fi
fi