2017-07-30 4 views
-1

J'ai un script shell dans lequel j'exécute la commande ls de différents hôtes, mais j'ai du mal à y parvenir. Voici mon colde ci-dessous:SSH de Shell Script

#!/bin/sh  
nodes="hostname1 hostname2" 
cmd="ls -ltrha" 
for node in ${nodes}; do 
    ssh ${node} '`$cmd`' 
done 

Le problème avec ce code est qu'il peut ssh hostname1 parfaitement, mais il ne s'exécute même pas la commande ls ou même hostname2 ssh.

Une idée de ce que je fais mal ici?

**** New Edition **** J'ai aussi essayé le dessous d'une doublure, mais il n'exécuté ls sans ssh

 ssh hostname1 'ls -ltrha' 
+0

Voir: [Différence entre guillemets simples et doubles dans bash] (http://stackoverflow.com/q/6697753/3776858) – Cyrus

+0

Merci pour votre commentaire Cyrus, mais je ne pense pas que le problème soit uniquement entre guillemets. J'ai juste essayé d'exécuter un doubleur et à la place il a seulement excuté le $ cmd sans exécuter le commend ssh. S'il vous plaît jeter un oeil à mon poste –

+0

s'il vous plaît mettre à jour votre Q pour indiquer comment vous gérez l'invite de mot de passe de l'hôte distant. Bonne chance. – shellter

Répondre

-1

vous pouvez le faire

#!bin/sh 
nodes="hostname1 hostname2" 
for node in ${nodes}; do 
ssh ${node} 
`ls -ltrha` 
done 
0
#!/bin/sh  
nodes="hostname1 hostname2" 
cmd="ls -ltrha" 
for node in $nodes; do 
    ssh "$node" "$cmd" 
done