diff --git a/utils/_cranspasswords b/utils/_cranspasswords new file mode 100644 index 00000000..f1b76bf5 --- /dev/null +++ b/utils/_cranspasswords @@ -0,0 +1,13 @@ +#compdef cranspasswords + +_fichiers () { + compadd "$@" - $(cranspasswords --list) +} + +_arguments -C -s \ + '--re-encrypt-all[rechiffre tous les fichiers]:Fichiers:_fichiers' \ + '--edit[edite un fichier chiffre]:Fichiers:_fichiers' \ + '--remove[suppression d''un fichier chiffre]:Fichiers:_fichiers' \ + '--view[voir un fichier chiffre]:Fichiers:_fichiers' \ + '--list[liste des fichiers chiffres]' \ + '*::Fichiers:_fichiers' diff --git a/utils/cranspasswords b/utils/cranspasswords new file mode 100755 index 00000000..235bb69a --- /dev/null +++ b/utils/cranspasswords @@ -0,0 +1,134 @@ +#! /bin/sh + +############################################################################## +# variables générales + +SRV=vert.adm.crans.org +REP=/root +TMP=`tempfile -m 600` +trap "rm -f ${TMP}" EXIT + +############################################################################## +# parsage des arguments + +if [[ -z "$1" ]] ; then + ACTION="--view" + CHOIX="" +elif echo $1 | grep -q '^--' ; then + ACTION=$1 + CHOIX=$2 +else + ACTION='--view' + CHOIX=$1 +fi + +############################################################################## +# fonctions utiles + +function liste () { + # donne la liste des mot de passe + echo -e "\033[1;34mListe des mot de passe disponibles :\033[1;0m" >&2 + ssh ${SRV} "ls ${REP} | grep -e '.asc$' | sed 's/\.asc$//g' | sed 's/^/ /g'" 2> /dev/null +} + +function choix () { + # choix du fichier + if [[ -z "$CHOIX" ]] ; then + liste + echo + echo -e -n "\033[1;34mChoix : \033[1;0m" + read CHOIX + else + echo -e "\033[1;34mChoix :\033[1;0m $CHOIX" + fi + echo +} + +function dechiffre () { + # récupère le mot de passe $CHOIX, le déchiffre et le colle dans $TMP + # ${TMP} sera vide si les pass n'existe pas + echo -e "\033[1;34mConnection à ${SRV}\033[1;0m" + ssh ${SRV} -t "sudo -p 'Mot de passe sudo : ' echo -n" 2> /dev/null + echo + echo -e "\033[1;34mRécupération du fichier et déchifrage\033[1;0m" + ssh ${SRV} "sudo cat ${REP}/$CHOIX.asc 2> /dev/null" | gpg --decrypt 2> /dev/null > ${TMP} + echo +} + +function chiffre () { + # chiffre les fichier $TMP et les colle dans le fichier $CHOIX + echo -e "\033[1;34mChiffrage et envoi sur ${SRV}\033[1;0m" + if [[ ! -s ${TMP} ]] ; then + echo -e "\033[1;31mFichier vide, bandon...\033[1;0m" + exit 1 + fi + gpg --armor --encrypt --output - \ + --recipient Stephane.Glondu@crans.org \ + --recipient pauget@crans.org \ + --recipient dubost@crans.org \ + --recipient etienne.chove@crans.org \ + --recipient xavier.pessoles@crans.org \ + --recipient Vincent.Bernat@crans.org \ + --recipient Nicolas.Stransky@crans.org \ + --recipient mathieu.segaud@crans.org \ + --recipient salles@crans.org \ + ${TMP} | ssh ${SRV} "sudo sh -c \"cat > ${REP}/${CHOIX}.asc\"" +} + +function edite () { + # édite le fichier temporaire + $EDITOR ${TMP} +} + +function voir () { + # affiche le contenu du fichier temporaire + echo -e "\033[1;34mAffichage du fichier\033[1;0m" + less ${TMP} +} + +function supprime () { + # supprime un fichier + echo -e "\033[1;34mSuppression du fichier chiffré : \033[1;0m${CHOIX}" + CONFIRM="oui je suis sur" + echo -n "Tappez \"$CONFIRM\" :" + read CONFIRM2 + echo + if [[ "${CONFIRM}" == "${CONFIRM2}" ]] ; then + echo -e "\033[1;34mConnection à ${SRV}\033[1;0m" + ssh ${SRV} -t "sudo -p 'Mot de passe sudo : ' echo -n" 2> /dev/null + echo + echo -e "\033[1;34mSuppression du fichier\033[1;0m" + ssh ${SRV} "sudo rm -f ${REP}/$CHOIX.asc 2> /dev/null" + echo -e "\033[1;32mFichié supprimé...\033[1;0m" + else + echo -e "\033[1;31mAbandon...\033[1;0m" + fi +} + +############################################################################## + +if [[ "$ACTION" == "--re-encrypt-all" ]] ; then + for CHOIX in `liste 2> /dev/null` ; do + echo -e "\033[1;33mTraitement de : \033[1;0m${CHOIX}" + echo + dechiffre + chiffre + echo + done +elif [[ "$ACTION" == "--edit" ]] ; then + choix + dechiffre + edite + chiffre +elif [[ "$ACTION" == "--remove" ]] ; then + choix + supprime +elif [[ "$ACTION" == "--view" ]] ; then + choix + dechiffre + voir +elif [[ "$ACTION" == "--list" ]] ; then + liste 2> /dev/null | cut -b 5- +else + echo "Usage : cranspasswords [--re-encrypt-all|--edit|--remove|--view|--list] [FICHIER]" +fi