124 lines
3.4 KiB
Bash
124 lines
3.4 KiB
Bash
|
#!/bin/bash
|
|||
|
|
|||
|
# script de deploiement de machine sous linux via ssh, parceque ca me gonfle de le faire à la main tout le temps.
|
|||
|
# le but sera de deployer les outils de base sur une becane au systeme tout neuf
|
|||
|
# la becane aura besoin :
|
|||
|
# - d'un debian (ou dérivés)
|
|||
|
# - d'un serveur ssh (plus pratique pour deployer a distance)
|
|||
|
# - d'un user onimaro avec sudoers ALL=ALL(ALL) NOPASSWD:ALL en connexion mdp (on verra pour du root plus tard)
|
|||
|
|
|||
|
# y'a plus qu'a espérer que ce script ne reste pas 7 lignes de commentaire durant toute son existance.
|
|||
|
|
|||
|
# parametres
|
|||
|
# param1 : machine_cible : url ou ip de la machine sur laquelle on souhaite déployer le bordel
|
|||
|
|
|||
|
##################################
|
|||
|
# help
|
|||
|
if [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "" ]
|
|||
|
then
|
|||
|
echo
|
|||
|
echo "###########################################################################################################################"
|
|||
|
echo "Syntaxe : ${0##*/} machine_cible"
|
|||
|
echo "machine_cible = url ou ip de la machine cible"
|
|||
|
echo "###########################################################################################################################"
|
|||
|
echo
|
|||
|
exit 0
|
|||
|
fi
|
|||
|
|
|||
|
##################################
|
|||
|
# check nombre d'arguments
|
|||
|
if [ $# -ne 1 ]
|
|||
|
then
|
|||
|
echo "Mauvais nombre d'arguments : $#"
|
|||
|
echo "Il en faut 1"
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
|
|||
|
# constantes a passer en fichier de parametres
|
|||
|
user_cible=onimaro
|
|||
|
|
|||
|
# recuperation des arguments
|
|||
|
machine_cible=$1
|
|||
|
|
|||
|
|
|||
|
|
|||
|
##################################
|
|||
|
# FONCTIONS #
|
|||
|
##################################
|
|||
|
# fonction connexionSSH
|
|||
|
# arguments :
|
|||
|
# arg1 : commande lancée
|
|||
|
#
|
|||
|
# passage de commandes vers la cible en SSH
|
|||
|
#
|
|||
|
|
|||
|
function connexionSSH
|
|||
|
{
|
|||
|
# check nombre d'arguments
|
|||
|
if [ $# -ne 1 ]
|
|||
|
then
|
|||
|
echo "Mauvais nombre d'arguments : $#"
|
|||
|
echo "Il en faut 1"
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
|
|||
|
# recuperation arguments
|
|||
|
commande_cible=$1
|
|||
|
|
|||
|
[ $(ssh ${user_cible}@${machine_cible} "${commande_cible}") -eq 0 ] || ( echo erreur sur la commande ${commande_cible} && exit 4 )
|
|||
|
}
|
|||
|
|
|||
|
# fonction disaster_hunter
|
|||
|
# arguments :
|
|||
|
# aucun
|
|||
|
#
|
|||
|
# on anticipe diverses catastrophes
|
|||
|
function disaster_hunter
|
|||
|
{
|
|||
|
# est-ce que le premier argument n'est pas une injection ?
|
|||
|
[ $(echo ${machine_cible} | wc -w) -eq 1 ] || ( echo "une url ou une IP, rien d'autre, SVP" && exit 2 )
|
|||
|
|
|||
|
# est-ce qu'on se connecte à la machine en SSH ?
|
|||
|
[ $(ssh ${machine_cible} "exit") -eq 0 ] || ( echo "machine ${machine_cible} injoignable." && exit 3 )
|
|||
|
|
|||
|
# verification des listes de paquets et de users
|
|||
|
for fichier in liste_paquets liste_users; do
|
|||
|
if [ -r ${fichier} ]; then
|
|||
|
OLD_IFS=$IFS
|
|||
|
IFS='\n'
|
|||
|
for paquet in $(cat ${fichier}); do
|
|||
|
[ $(echo ${paquet} | wc -w ) -eq 1 ] || shithappened=8
|
|||
|
done
|
|||
|
IFS=${OLD_IFS}
|
|||
|
[ ${shithappened} -eq 8 ] && echo "Le fichier ${fichier} ne doit contenir qu'un mot par ligne" && exit 6
|
|||
|
pas_de_${fichier}=0
|
|||
|
else
|
|||
|
echo "fichier ${fichier} illisible ou introuvable."
|
|||
|
pas_de_${fichier}=1
|
|||
|
fi
|
|||
|
done
|
|||
|
}
|
|||
|
|
|||
|
# fonction deploy_packages
|
|||
|
# arguments :
|
|||
|
# aucun
|
|||
|
#
|
|||
|
# on deploie les paquets a partir du fichier de parametres liste_paquets
|
|||
|
function deploy_packages
|
|||
|
{
|
|||
|
for paquet in $(cat ${fichier_paquets}); do
|
|||
|
connexionSSH ${paquet}
|
|||
|
done
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
##################################
|
|||
|
# MAIN #
|
|||
|
##################################
|
|||
|
disaster_hunter
|
|||
|
[ ${pas_de_liste_paquets} -eq 0 ] && deploy_packages
|
|||
|
[ ${pas_de_liste_users} -eq 0 ] && deploy_packages
|
|||
|
deploy_users
|