Le 29/05/2013 10:40, Nahliel Steinberg a écrit :
> Bonjour,
>
> J'ai un script qui me déploie des clés automatiquement sur mes environnements 
> le voici :
>
> #!/bin/bash
> a=0
> for IP in `cat iptest`
> do
> a=`expr $a + 1`
> cat id_rsa.pub | ssh root@$IP "cat - >> .ssh/authorized_keys"
> echo -e "\033[1;32m $a - copie de la clé sur $IP [OK] \033[0m"
> done
>
> le fichier iptest qui est parsé contient la liste des adresses IP des 
> machines uniquement
> comme ceci :
>
> 192.168.0.1
> 192.168.0.2
> etc.....
>
> J'ai une autre version de mon fichier qui contient les adresses ip + nom de 
> machine comme ceci :
>
> 192.168.0.1  machine1
> 192.168.0.2  machine2
> etc.....
>
> Savez-vous comment je peux adapter mon script pour qu'il m'affiche dans le 
> echo
> l'ip et le nom de la machine sur laquelle la clé à été copiée ?
>
>
>
>
>
>
Bonjour,
Avec un sed ou un cut, tu pourras bien t'en sortir. Pour info, voici un
petit script que j'ai écrit jadis (pas fini bien sûr) qui permet
d'installer mes clefs sur mes serveurs distants :

$ cat bin/install-maintenance

    #!/bin/sh

    # SM (SSH Maintenance) v 1.0
    # Script d'installation d'une clef ssh
    # Configuration pour créer un pont ssh (-R) automatiquement
    # afin de permettre un accès root sur la machine cible.
    #
    # Réalisé par Adrien Poupin ([email protected])

    VERSION=1.0

    # Define your own default vars
    DEFAULT_HOST=dev.creasixtine.com
    DEFAULT_USER=user-maintenance
    DEFAULT_PORT=65500

    # Error codes
    SSH_ERROR=10
    BAD_PARAMS=11

    print_title()
    {
        sleep 0.5
        echo "\033[1;31m* $1\033[0m"
    }

    usage()
    {
        cat <<_USAGE
    Usage : `basename $0` [-i]
        -h   Afficher cette aide.
        -t, --test-only
             Teste uniquement les connexions et affiche les comman-
              des à effectuer pour la mise en place d'un tunnel
              SSH.
        -i, --install
             Installation. Modification de ~/.ssh/config en local,
              de ~/.ssh/authorized_keys sur le serveur distnat, et
              ajout du script init.
    _USAGE
    }

    get_info()
    {
        print_title "Installation d'un pont SSH vers un serveur distant"
       
        echo -n "Hôte cible ($DEFAULT_HOST) : "
        read HOST
        [ -z "$HOST" ] && HOST=$DEFAULT_HOST
       
        echo -n "Utilisateur ($DEFAULT_USER) : "
        read USER
        [ -z "$USER" ] && USER=$DEFAULT_USER
       
        echo -n "Commentaire (Défaut : 'hostname') : "
        read COMMENT
        [ -z "$COMMENT" ] && COMMENT=`hostname`
       
        echo -n "Port à ouvrir sur l'hôte distant ($DEFAULT_PORT) : "
        read REMOTE_PORT
        [ -z "$REMOTE_PORT" ] && REMOTE_PORT=$DEFAULT_PORT
    }

    gen_key()
    {
        print_title "Création de la clef SSH"
        ssh-keygen -t rsa -q -C "$COMMENT - port ouvert : $REMOTE_PORT"
    -f rsa_id
        KEY="$USER_$HOST.key"
        PUBKEY="$KEY.pub"
        mv -v rsa_id ~/.ssh/$KEY
        mv -v rsa_id.pub ~/.ssh/$PUBKEY
    }

    configure_localhost()
    {
        print_title "Configuration de la machine locale"
        if [ -z $BOOL_INSTALL ]; then
        {
            echo -n "Configuration automatique de $HOME/.ssh/config
    (o/N) ? "
            read BOOL
        }
        else
        {
            BOOL=Y
        }
        fi
       
        if [ "$BOOL" = "Y" -o "$BOOL" = "y" -o "$BOOL" = "O" -o "$BOOL"
    = "o" ]; then
        {
            echo "Modification du fichier ~/.ssh/config"
            cat >> ~/.ssh/config <<EOF
    Host $HOST
         Hostname $HOST
         Port 22
         User $USER
         IdentityFile ~/.ssh/$KEY
    EOF
        }
        fi
       
        echo "TODO : rajouter un script ssh -R
    $REMOTE_PORT:localhost:$HOST $USER@$HOST"
    }

    install_remote_key()
    {
        print_title "Installation de la clef sur le serveur distant"
        if [ -z $BOOL_INSTALL ]; then
        {
            echo -n "Se connecter au serveur distant pour copier la clef
    (o/N) ? "
            unset BOOL
            read BOOL
        }
        else
        {
            BOOL=Y
        }
        fi
       
        if [ "$BOOL" = "Y" -o "$BOOL" = "y" -o "$BOOL" = "O" -o "$BOOL"
    = "o" ]; then
        {
            echo "Clef publique exportée : $(cat ~/.ssh/$PUBKEY)"
            echo "ssh $USER@$HOST ..."
           
            ssh $USER@$HOST "echo \"$(cat ~/.ssh/$PUBKEY)\" >>
    ~/.ssh/authorized_keys"
           
            [ $? -ne 0 ] && print_title "Erreur SSH. Abandon." && exit
    $SSH_ERROR
            echo "... Installation réussie !"
        }
        fi
    }


    connection_test()
    {
        print_title "Test de la connexion : Vous ne devriez pas avoir à
    taper de mot de passe."
        ssh $USER@$HOST "test 1"

        [ $? -ne 0 ] && echo "Erreur SSH. Abandon." && exit $SSH_ERROR
        echo "Test OK !"
    }

    test_only()
    {
        print_title "Simulation."
        cat <<_SIMULATION_
    Pour mettre en place le tunnel SSH vers le serveur distant :
    1) Créer des clefs SSH avec
         ~$ ssh-keygen -t rsa -q -C "$COMMENT - port ouvert :
    $REMOTE_PORT" -f rsa_id
    2) Déplacer les clefs (et les renommer sous un nom parlant, ex.
    ~/.ssh/$HOST_$USER) vers le répertoire ~/.ssh/
    3) Ajouter la configuration sur localhost (~/.ssh/config) :
    Host $HOST
         Hostname $HOST
         Port 22
         User $USER
         IdentityFile ~/.ssh/MA_CLEF_PRIVÉE
    4) Ajouter la clef publique (~/.ssh/MA_CLEF_PRIVÉE.pub) sur l'hôte
    distant dans ~/.ssh/authorized_keys
    5) Tester que le pont fonctionne bien :
         ~$ ssh -R $REMOTE_PORT:localhost:22 $USER@$HOST
    6) Ajouter un script de démarrage ou un cron (nécessite autossh) :
         ~$ screen -dmS autossh autossh -R $REMOTE_PORT:localhost:22
    $USER@$HOST
    _SIMULATION_
        exit 0;
    }


    #
    # main()
    #

    if [ $# -ge "1" ]; then
    {
        for i in `seq 1 $#`; do
        {
            case $1 in
                -i | --install) BOOL_INSTALL="1";;
                -t | --test-only) DO_NOTHING="1";;
                -h | --help) usage;;
                *) echo "$1 : Mauvais argument"; usage; exit $BAD_PARAMS ;;
            esac
           
            shift
        }
        done
    }
    fi

    sleep 0.5
    echo "\033[1;32mSSH Maintenance version $VERSION\033[0m"
    # Test-only case : tells the user.
    [ ! -z $DO_NOTHING ] && echo "Test-only : Mode de simulation seule."

    # Get the vars : HOST, USER and COMMENT
    get_info

    # Test only
    [ ! -z $DO_NOTHING ] && test_only

    # Generate the RSA keys to install on localhost and remote host.
    gen_key

    # Configure the local machine to automatically make a bridge.
    configure_localhost

    # Install the RSA key on remote host
    install_remote_key

    # Testing the connection
    connection_test

    exit 0;



-- 
Adrien
-------------------------------------------

Attachment: signature.asc
Description: OpenPGP digital signature

Répondre à