2008-10-22 12 views
0

J'ai configuré mes clients & serveur pour la connexion sans mot de passe. Comme la connexion sans mot de passe en copiant la clé RSA du serveur sur /root/.ssh/id-rsa.pub de tous les clients. mais ceci, j'ai fait manuellement. J'aime automatiser ce processus en utilisant un script shell et en fournissant un mot de passe aux machines via un script. Si ce problème est résolu, je souhaite également utiliser rsync pour automatiser les éléments Push sur tous les serveurs. Quelqu'un peut-il m'aider à cet égard.Fournir le mot de passe en utilisant le script Shell

Merci

Répondre

2

Ce script est dans les machines Debian (et ses dérivés), pour distribuer les clés. C'est ce qu'on appelle ssh-copy-id. Vous l'utiliseriez comme ceci:

ssh-copy-id [-i identity_file] [[email protected]]machine 

Ensuite, vous entrez le mot de passe et la copie serait effectuée. Vous ne le feriez qu'une seule fois et vous pourriez utiliser le rsync sur ssh comme d'habitude.

#!/bin/sh 

# Shell script to install your identity.pub on a remote machine 
# Takes the remote machine name as an argument. 
# Obviously, the remote machine must accept password authentication, 
# or one of the other keys in your ssh-agent, for this to work. 

ID_FILE="${HOME}/.ssh/identity.pub" 

if [ "-i" = "$1" ]; then 
    shift 
    # check if we have 2 parameters left, if so the first is the new ID file 
    if [ -n "$2" ]; then 
    if expr "$1" : ".*\.pub" ; then 
     ID_FILE="$1" 
    else 
     ID_FILE="$1.pub" 
    fi 
    shift   # and this should leave $1 as the target name 
    fi 
else 
    if [ x$SSH_AUTH_SOCK != x ] ; then 
    GET_ID="$GET_ID ssh-add -L" 
    fi 
fi 

if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then 
    GET_ID="cat ${ID_FILE}" 
fi 

if [ -z "`eval $GET_ID`" ]; then 
    echo "$0: ERROR: No identities found" >&2 
    exit 1 
fi 

if [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then 
    echo "Usage: $0 [-i [identity_file]] [[email protected]]machine" >&2 
    exit 1 
fi 

{ eval "$GET_ID" ; } | ssh $1 "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1 

cat <<EOF 
Now try logging into the machine, with "ssh '$1'", and check in: 

    .ssh/authorized_keys 

to make sure we haven't added extra keys that you weren't expecting. 

EOF 
0

Si vous devez pousser les mises à jour/modifications à plusieurs ordinateurs dans un réseau, vous voudrez peut-être envisager de regarder quelque chose comme Puppet qui fonctionne en dehors des canaux normaux.

+0

L'URL de la marionnette a changé: http://puppetlabs.com/ – omt66

0

vous pouvez utiliser, attendez-vous à vous connecter à une machine distante lorsque la méthode .ssh/authorized_keys n'est pas disponible. Par exemple:

#!/usr/bin/expect 

spawn ssh [email protected] 
expect "*password: $" 
send "YOUR PASSWORD HERE\n" 
send "bash\n" 
interact 
+0

mais comment utiliser? J'ai essayé mais je ne travaillais pas. c'est le mesg. Je reçois. bash: ./test2: usr/bin/expect: mauvais interprète: aucun fichier ou répertoire de ce type – iankits

+0

Vous devez procéder à l'installation pour que cela fonctionne. –

Questions connexes