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?

Réponses:


2

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


Ç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! :)


Je ne savais pas pssh, Je vais examiner. Je vous remercie!
Valter Silva
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.