#!/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