[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] - script afficher les deux infos



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 (contact@adrien-poupin.fr)

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


Reply to: