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
|