#1 Le 17/02/2013, à 15:26
- ruf
[résolu] Deploie clés ssh auto sur serveur !
Bonjour a vous,
Je vais peut être poser une question que vous avez l' habitude de lire mais je n' en peut plus ...
Voila, je recherche un moyen de connecter deux serveurs ensemble avec une une génération de clés ssh sans avoir a entrer une ligne de commande sur un terminal ...
Tout cela en passant par un script !
J' ai fait énormément de recherche depuis quelques jours, j' ai récupéré beaucoup, peut être même trop d' infos et comme on dis :
-Trop d' infos tue l' info !
En gros un script qu' un user lancerait sur son dédié, qui installerait ca machine, par exemple, et a la fin de ce script, je recherche une façon de lui faire générer une clés ssh, de l' envoyer a un autre serveur pour que la communication ce fasse entre les deux sans demande de mot de passe. Exemple, pour utiliser rsync ou autre commande scp ou ssh.
J' ai déjà trouve pas mal d alternative mais pas forcement concluante vu que je veux installer le moins de chose possible sur le serveur du user .
Les meilleurs outils (je pense, pour mon problème) que j' ai pus trouver :
- sshpass, mais ca ne me convient pas vu qu' il faut y inscrire le mot de passe en clair .
- J' ai trouvé expect, mais je n' arrive pas vraiment a m' en sortir avec ...
- Puppetmaster peut être une bonne solution alternative, (pour éviter une connexion ssh ) vu que je peut synchroniser mes travaux sur le serveur du user, mais je ne fonctionne pas avec des noms de domaine mais avec des ip's public, en tout cas je n' ai pas réussi a le faire fonctionner avec des Ip's.
Toutes réponse sera étudié
A tout les fans d' Ultimex !
Dernière modification par ruf (Le 19/02/2013, à 14:53)
HOSTLAB Coming soon
Hors ligne
#2 Le 17/02/2013, à 22:20
- sechanbask
Re : [résolu] Deploie clés ssh auto sur serveur !
Bonjour,
Personnellement pour faire un échange de clé, j'utilise le tuto suivant :
http://www.app3l.org/dokuwiki/doku.php? … oriels:ssh
Sur le même site il y a 2 choses qui pourrait t'intéresser :
SSHFS et RSYNC
http://www.app3l.org/dokuwiki/doku.php? … iels:start
Je ne saurais trop vous conseiller d'utiliser les choses les plus simple pour une question de maintenance. Un rsync avec SSH fait des miracle !!
Hors ligne
#3 Le 19/02/2013, à 14:52
- ruf
Re : [résolu] Deploie clés ssh auto sur serveur !
Bonjour,
désolé pour cette réponse tardive ...
Merci pour les liens mais ce n' est pas vraiment ca que je recherchais.
Par contre, j' ai réussi a trouvé la solution avec expect et un script, je vous explique .
Tout d' habord, sur chacun des serveur il faut que vous ayez vos clés ssh déjà générer et place ce petit bout de script sur chaque serveur.
Donc quand le client lance ce script sur son serveur (en passant par une interface web par exemple !) il va générer la clé sur le serveur centrale (de synchro par exemple) et pourra donc lancer une synchro en passant par son interface web en utilisant rsync par exemple !
Generez vos clés :
mkdir .ssh
chmod 700 .ssh
cd .ssh
ssh-keygen -q -t dsa -N "" -b 1024 -f
touch authorized_keys
chmod 600 authorized_keys
cat ../id_dsa.pub >> authorized_keys
rm ../id_dsa.pub
placer le script et le rendre exécutable :
#!/bin/bash
#
# Copyright (c) Finnbarr P. Murphy 2006
#
# ---- start configurables ----
PATH=/usr/sbin:/usr/bin:/sbin:/bin
LOCALHOMEDIR=/home
# ----- end configurables -----
function usage {
printf "Usage: setupkeys -U remote-username -P remote-password -H remote-host -u local-username\n"
exit 2
}
# --- script starts here
echo
(( $# == 0 )) && usage
(( $EUID != 0 )) && {
echo "ERROR: You must be root to run this script."
exit 1
}
username=""
password=""
host=""
localuser=""
while getopts "u:P:U:H:" OPTION
do
case $OPTION in
U) username="$OPTARG";;
P) password="$OPTARG";;
H) host="$OPTARG";;
u) localuser="$OPTARG";;
esac
done
# --- basic argument checking
if [[ -z "$username" ]]; then
echo "ERROR - No username entered."
exit 1
fi
if [[ -z "$password" ]]; then
echo "ERROR - No passed entered."
exit 1
fi
if [[ -z "$host" ]]; then
echo "ERROR - No host entered."
exit 1
fi
if [[ -z "$localuser" ]]; then
echo "ERROR - No localuser entered."
exit 1
fi
# --- do some sanity checking here
echo -n "Checking if $localuser in /etc/passwd. "
grep "^$localuser:" /etc/passwd > /dev/null 2>&1
RESULT=$?
if (( RESULT == 1 )); then
echo; echo "ERROR - $localuser not found in /etc/passwd."
exit 1
fi
echo "Yes"
echo -n "Checking connectivity with $host. "
/bin/ping -q -c 2 $host > /dev/null 2>&1
RESULT=$?
if (( RESULT == 1 )); then
echo; echo "ERROR - could not ping $host."
exit 1
fi
echo "System is alive."
# --- check for $localuser public and private ssh keys
# --- we need to be $localuser here when using ssh-* utilities
echo -n "Checking for $localuser ssh key files. "
SSH_KEYS_FOUND=0
if [[ -d $LOCALHOMEDIR/$localuser ]]; then
if [[ -s $LOCALHOMEDIR/$localuser/.ssh/id_dsa && -s $LOCALHOMEDIR/$localuser/.ssh/id_dsa.pub ]]; then
sudo -u $localuser -- /usr/bin/ssh-keygen -e -f $LOCALHOMEDIR/$localuser/.ssh/id_dsa.pub | grep "1024-bit DSA" > /dev/null 2>&1
RESULT=$?
if (( RESULT == 0 )); then
SSH_KEYS_FOUND=1
fi
fi
fi
if (( SSH_KEYS_FOUND == 1 )); then
echo "Found"
else
echo "Not found"
rm -rf $LOCALHOMEDIR/$localuser/.ssh
mkdir $LOCALHOMEDIR/$localuser/.ssh
chmod 700 $LOCALHOMEDIR/$localuser/.ssh
chown -R $localuser:$localuser $LOCALHOMEDIR/$localuser/.ssh
sudo -u $localuser -- /usr/bin/ssh-keygen -q -t dsa -N "" -f $LOCALHOMEDIR/$localuser/.ssh/id_dsa
echo "New ssh key files generated (DSA protocol)"
fi
# --- add $localname's public key to $username@$host authorized keys
TMPUSER=expectscript-user.$$
cat <<EOT > $TMPUSER
#!/usr/bin/expect
if {[llength \$argv] != 4} {
puts "usage: \$argv0 localuser username password host"
exit 1
}
log_file -a expectscript-user.log
log_user 0
set localuser [lindex \$argv 0]
set username [lindex \$argv 1]
set password [lindex \$argv 2]
set host [lindex \$argv 3]
set timeout 60
spawn /usr/bin/ssh-copy-id -i \$localuser/.ssh/id_dsa.pub \$username@\$host
expect {
"assword: " {
send "$password\n"
expect {
"again." { exit 1 }
"expecting." { }
timeout { exit 1 }
}
}
"(yes/no)? " {
send "yes\n"
expect {
"assword: " {
send "$password\n"
expect {
"again." { exit 1 }
"expecting." { }
timeout { exit 1 }
}
}
}
}
}
exit 0
EOT
echo -n "Copying $localuser's public key to $host. "
chmod 755 $TMPUSER
sleep 3
./$TMPUSER $LOCALHOMEDIR/$localuser $username $password $host
RESULT=$?
rm -f $TMPUSER
if (( RESULT == 0 )); then
echo "Succeeded"
rm -f expectscript-user.log
else
echo "Failed"
echo "ERROR: Check expectscript-user.log"
exit 1
fi
# we are done
echo "Setup completed. Goodbye."
exit 0
chmod +x script.sh
vous le lancer avec la commande suivante, en root obligatoirement :
sudo ./script.sh -U remote-user -P remote-password -H remote-server -u user-local
n' oubliez pas d' installer expect sur votre client !
apt-get install expect
J' espère avoir aidé !
See you !
Dernière modification par ruf (Le 08/05/2013, à 03:02)
HOSTLAB Coming soon
Hors ligne