Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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é big_smile

A tout les fans d' Ultimex ! wink
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 !

source

Dernière modification par ruf (Le 08/05/2013, à 03:02)


HOSTLAB Coming soon

Hors ligne