Comment faire un service multiple SSH avec un pour dans SHELL?

0

Je voudrais accéder à un serveur via SSH, exécuter des commandes et quitter. Faites cela pour beaucoup de serveurs.

Je sais que je peux le faire pour une seule machine, avec ce script:

ssh **IP** << EOF

chown -R **COMMAND 1**

chown -R **COMMAND 2**

chmod -R 775 **COMMAND 3**

EOF

Mais quand j'essaie de mettre cela à l'intérieur d'un FOR dans SHELL, n'arrête pas de dire line 17: syntax error: unexpected end of file.}

Voici mon code pour plusieurs serveurs SSH:

#!/bin/bash

#user already added to group nagios by LDAP

declare -a arr=( **IP1 IP2 IP3** ...)

for i in ${arr[@]}
do
   echo  "Acessing server $i"
   ssh IP << EOF
   chown -R COMMAND 1
   chown -R COMMAND 2
   chmod -R 775 COMMAND 3
   EOF
done

Où est mon erreur ici?

Valter Silva
la source

Réponses:

2

bash s'attend à voir EOF au début d'une ligne dans votre script. Essayez de supprimer le retrait avant EOF.

Flup
la source
Ça marche, merci! Cependant, il imprime Pseudo-terminal will not be allocated because stdin is not a terminal., devrais-je m'inquiéter à ce sujet?
Valter Silva
1
Pas si ça marche;) cependant, pour éviter le message, vous pouvez exécuter les commandes sans essayer d’allouer un pty: ssh hostname 'command1; command2; command3'.
Flup
génial! marche parfaitement!
Valter Silva
1

Essayez avec le caractère de nouvelle ligne après le premier et avant le dernier EOF.

Une autre chose qui me vient à l’esprit est que vous pouvez également utiliser pssh (SSH parallèle) pour faire le travail. Je ne sais pas si cela correspond à votre projet.

J'espère que cela pourra aider! :)

Konstantin Boyanov
la source
Je ne savais pas pssh, Je vais examiner. Je vous remercie!
Valter Silva