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.