2010-04-01 7 views
0

j'ai environ 12 ordinateurs qui ont chacun le même script sur eux. Ce script pings simplement toutes les autres machines, et imprime si la machine est « accessible » ou « injoignable ». Cependant, il est inefficace de se connecter à chaque machine manuellement à l'aide ssh pour exécuter ce script. Supposons que je sois connecté au nœud 1. Est-il possible de me connecter automatiquement au nœud 2 à 12 en utilisant SSH, d'exécuter le script ping, de transférer les résultats dans un fichier, de me déconnecter et de passer à la machine suivante ? Un genre de script shell bash?SSH Auto et exécuter le script

Je crains que je suis un peu perdu depuis que je ne l'ai pas eu l'expérience avec les scripts shell avant.

+2

Voir http://serverfault.com/questions/13168/managing-a-linux-cluster pour plusieurs suggestions. –

+0

@Anyan Hourieh: D'accord. Il devrait être migré et fermé comme copie exacte. –

Répondre

3

Depuis le script est sur les autres machines, vous pouvez tout simplement avoir ssh exécuter la commande là pour vous:

ssh $hostname my_script >> results_file 

Lorsque vous spécifiez une commande comme ça, il est exécuté au lieu de shell de connexion.

Je vais laisser à vous de savoir comment faire une boucle sur hostnames!

+1

Étant donné que l'OP n'a pas l'expérience du shell-scripting, je vais vous donner un indice: 'hosts =" host1 host2 host3 "; pour l'hôte dans $ hosts; faire ssh $ host ...; done' –

+0

que se passe-t-il si my_script exécute sudo et vous invite à entrer un mot de passe? – knocte

0

Une astuce que vous devrez utiliser est la configuration des clés pré-autorisées pour chaque hôte. Ensuite, vous pouvez exécuter un script sur un hôte, en exécutant quelque chose comme la commande 'ssh hostname> log.hostname'

0

Ce script peut être ce que vous cherchez: Il vous permet d'exécuter une commande (qui peut être votre script) sur plusieurs machines distantes via ssh. Il est un script simple avec la source de bash disponible, donc vous devriez être en mesure de le personnaliser à vos besoins:

http://www.heinzi.at/projects/upgradebest.sh/

0

Oui vous pouvez
vous avez réellement besoin de 2 petits scripts comme suit:
remote_ssh.sh (qui prend comme premier argument le nom de la machine et le reste des arguments sont votre script que vous voulez exécuter avec ses propres arguments)
Exemple: remote_ssh.sh node5 "echo hello world"

remote_ssh.sh comme suit:

#!/Bin/bash
ALL_ARG = $ @
FST_ARG = 1
$ REST_ARG = $ {ALL_ARG ## $ FST_ARG}
echo "exécution COMMANDE A DISTANCE ON $ FST_ARG"
/usr/bin/bash $ ssh FST_ARG execute_ssh_command.sh $ FST_ARG pwd $ REST_ARG

execute_ssh_command.sh comme suit:

#!/ Bin/bash
ALL_ARG = $ @
FST_ARG = 1
DIR_ARG = 2
$ REM_ARG = "$ 1 $ 2"
REST_ARG = $ {ALL_ARG ## $ REM_ARG}

cd $ DIR_ARG
$ $ REST_ARG

Bien sûr, vous devez obtenir ce 2 scripts dans votre chemin de tous vos noeuds (peut-être ~/bin /)

espoir tha t c'est utile