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
-------------------------------------------
|